public static void main(String[] args) throws IOException { try{ HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFCellStyle style = wb.createCellStyle(); //样式对象 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平 HSSFRow row = sheet.createRow((short) 0); HSSFRow row2 = sheet.createRow((short) 1); sheet.addMergedRegion(new Region(0,(short)0,1,(short)0)); HSSFCell ce=row.createCell((short)0); ce.setEncoding(HSSFCell.ENCODING_UTF_16);//中文处理 ce.setCellValue("项目//日期"); //表格的第一行第一列显示的数据 ce.setCellStyle(style); //样式,居中 int num=0; for(int i=0;i<9;i++){ //循环9次,每一次都要跨单元格显示 //计算从那个单元格跨到那一格 int celln=0; int celle=0; if(i==0){ celln=0; celle=1; }else{ celln=(i*2); celle=(i*2+1); } //单元格合并 //四个参数分别是:起始行,起始列,结束行,结束列 sheet.addMergedRegion(new Region(0,(short)(celln+1),0,(short)(celle+1))); HSSFCell cell = row.createCell((short) (celln+1) ); cell.setCellValue("merging"+i); //跨单元格显示的数据 cell.setCellStyle(style); //样式 //不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额” HSSFCell cell1 = row2.createCell((short) celle ); HSSFCell cell2 = row2.createCell((short) (celle+1)); cell1.setEncoding(HSSFCell.ENCODING_UTF_16); cell1.setCellValue("数量"); cell1.setCellStyle(style); cell2.setEncoding(HSSFCell.ENCODING_UTF_16); cell2.setCellValue("金额"); cell2.setCellStyle(style); num++; } //在后面加上合计百分比 // 合计 在最后加上,还要跨一个单元格 sheet.addMergedRegion(new Region(0,(short)(2*num+1),0,(short)(2*num+2))); HSSFCell cell = row.createCell((short) (2*num+1) ); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("合计"); cell.setCellStyle(style); HSSFCell cell1 = row2.createCell((short) (2*num+1) ); HSSFCell cell2 = row2.createCell((short) (2*num+2) ); cell1.setEncoding(HSSFCell.ENCODING_UTF_16); cell1.setCellValue("数量"); cell1.setCellStyle(style); cell2.setEncoding(HSSFCell.ENCODING_UTF_16); cell2.setCellValue("金额"); cell2.setCellStyle(style); //百分比 同上 sheet.addMergedRegion(new Region(0,(short)(2*num+3),0,(short)(2*num+4))); HSSFCell cellb = row.createCell((short) (2*num+3) ); cellb.setEncoding(HSSFCell.ENCODING_UTF_16); cellb.setCellValue("百分比"); cellb.setCellStyle(style); HSSFCell cellb1 = row2.createCell((short) (2*num+3) ); HSSFCell cellb2 = row2.createCell((short) (2*num+4) ); cellb1.setEncoding(HSSFCell.ENCODING_UTF_16); cellb1.setCellValue("数量"); cellb1.setCellStyle(style); cellb2.setEncoding(HSSFCell.ENCODING_UTF_16); cellb2.setCellValue("金额"); cellb2.setCellStyle(style); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); System.out.print("OK"); }catch(Exception ex){ ex.printStackTrace(); } }