/**
* 生成Excel表,可以指定行的高度以及对内容相同的单元格进行合并,并在超出打印范围时进行换页。
*
*/
public void creatSheet(Object[] listdate,String excelFileOut,String title,String[] filed,List heigths)
{
try
{
String titles = title;
String[] fileds = filed;
Object[] list = listdate;
List rh = heigths;
HSSFWorkbook workbook = new HSSFWorkbook();
int usedNumber = 0;
//for(int isheet = 0;isheet < 2;isheet++) //暂时设为1,需确定其数值。
while(list.length - usedNumber > 0)
{
HSSFSheet sheet = workbook.createSheet();
int heiTotal = 0;
//workbook.setSheetName(0,"变电一次部分",(short)1); 需传入专业组信息.
//workbook.setSheetName(0, "利用状況表", HSSFWorkbook.ENCODING_UTF_16);
//设置单元格宽度
for(int clumnumber = 0;clumnumber < fileds.length;clumnumber++)
{
sheet.setColumnWidth((short)clumnumber,(short)((fileds[clumnumber].length() * 2) * 256));
}
//********************************************************************************/
//定义title行的格式
//System.out.println((short)((fileds.length) / 3));
HSSFRow titlerow = sheet.createRow((short)0);
HSSFCellStyle titlestyle = workbook.createCellStyle();
HSSFFont titlefont = workbook.createFont();
titlefont.setFontHeightInPoints((short)18);
titlefont.setFontName("黑体");
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titlestyle.setFont(titlefont);
//titlestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//titlestyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFCell titlecell = titlerow.createCell((short)((fileds.length) / 3));
titlecell.setCellStyle(titlestyle);
titlecell.setEncoding(HSSFCell.ENCODING_UTF_16);
titlecell.setCellValue(titles);
//定义第二行格�?
//sheet.addMergedRegion(new Region(1,(short)4,1,(short)6));
HSSFRow row2 = sheet.createRow((short)1);
HSSFCellStyle row2style = workbook.createCellStyle();
HSSFFont row2font = workbook.createFont();
row2font.setFontHeightInPoints((short)12);
row2font.setFontName("仿宋_GB2312");
//字体加粗
row2font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
row2style.setFont(row2font);
//设定样式的的背景颜色填充
row2style.setFillBackgroundColor(HSSFCellStyle.NO_FILL);
row2style.setFillPattern(HSSFCellStyle.FINE_DOTS);
//居中对齐
row2style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
row2style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//设定单元个背景颜�?
row2style.setFillBackgroundColor(HSSFColor.GREY_40_PERCENT.index);
//设置单元格显示颜�?
row2style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
row2style.setFont(row2font);
row2style.setAlignment((short)2);//设置居中
row2style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边�
row2style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //左边�
row2style.setBorderRight(HSSFCellStyle.BORDER_THIN); //右边�
row2style.setBorderTop(HSSFCellStyle.BORDER_THIN); //上边�
//设置数据域单元格格式
HSSFCellStyle datastyle = workbook.createCellStyle();
HSSFFont datafont = workbook.createFont();
datafont.setFontHeightInPoints((short)10);
datafont.setFontName("仿宋_GB2312");
//数据域边缘线加暗色.
datastyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边�
datastyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //左边�
datastyle.setBorderRight(HSSFCellStyle.BORDER_THIN); //右边�
datastyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //上边�
datastyle.setFont(datafont);
datastyle.setWrapText(true);//文本区域随内容多少自动调整
datastyle.setVerticalAlignment((short)1);//设置垂直居中
datastyle.setAlignment((short)2);//设置水平居中
//style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
for(int j = 0;j < fileds.length;j++)
{
HSSFCell row2cell = row2.createCell((short)j);
row2cell.setCellStyle(row2style);
row2cell.setEncoding(HSSFCell.ENCODING_UTF_16);
row2cell.setCellValue(fileds[j]);
}
int tag = 0;
for(int i = 0;i + usedNumber < list.length;i++)
{
int number = Integer.parseInt((String)rh.get(i + usedNumber));
//累计高度,在大于指定值时换页.
heiTotal = heiTotal + number;
//判断是否换页,用break语句跳出。
if(heiTotal >= 55)
{
break;
}
List rows = (List)list[i + usedNumber]; //此处须加累计值,因为是多页。
tag++;
HSSFRow row = sheet.createRow((short)i + 2);
row.setHeight((short)(number * 256));//在此设置行的高度 需传入参数序列
for(int k = 0;k < rows.size();k++)
{
HSSFCell cell = row.createCell((short)k);
//cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellStyle(datastyle);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)rows.get(k));
}
}
//********************************************************************************/
//********************************************************************************/
for(int i = 0;i + usedNumber < list.length - 1;i++)
{
List rowfr = (List)list[i + usedNumber];
List rowbh = (List)list[i + 1 + usedNumber];
if(i < tag - 1)
{
for(int j = 0;j < rowfr.size();j++)
{
//System.out.println((String)rowfr.get(j));
//System.out.println((String)rowbh.get(j));
if(rowfr.get(j).equals(rowbh.get(j)) && ((String)rowfr.get(j) != "") && ((String)rowbh.get(j) != "") && ((String)rowfr.get(j) != null) && ((String)rowbh.get(j) != null))
{
//对内容重复的单元格进行合并
sheet.addMergedRegion(new Region(i + 2,(short)j,i + 3,(short)j));
}
}
}
}
usedNumber = usedNumber + tag;
//********************************************************************************/
}
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(excelFileOut);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();
System.out.println("文件生成...");
}
catch(Exception e)
{
System.out.println("Err: " + e);
}
}