HSSFWorkbook xssfWorkbook = new HSSFWorkbook(); //创建工作表对象
Sheet sheet = xssfWorkbook.createSheet(); //创建工作表
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(xssfWorkbook);// 获取列头样式对象
columnTopStyle.setWrapText(true);
HSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();//新建单元格样式
//边框
cellStyle.setBorderBottom(BorderStyle.THIN);; //下边框
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
cellStyle.setBorderTop(BorderStyle.THIN);//上边框
cellStyle.setBorderRight(BorderStyle.THIN);//右边框
HSSFCellStyle style = this.getStyle(xssfWorkbook); // 获取单元格样式对象
sheet.addMergedRegion(new CellRangeAddress(1, 3, 0, 0));//0--8
sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 1));//9--14
sheet.addMergedRegion(new CellRangeAddress(1, 3, 2, 2));//15--20
Row bthead = sheet.createRow(1);
cyly.add("当月合计");
Row bt = sheet.createRow(2);// 产生表格标题行
Cell cellhead2 = bt.createCell(0);
cellhead2.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
cellhead2.setCellValue("");
Cell createCell = bt.createCell(1);
createCell.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell.setCellValue("");
Row bt3 = sheet.createRow(3);
Cell cellhead3 = bt3.createCell(0);
cellhead3.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
cellhead3.setCellValue("");
Cell createCell2 = bt3.createCell(1);
createCell2.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell2.setCellValue("");
int t1 = 0;
int t2 = 0;
int t3 = 0;
for (int i = 0; i < cyly.size(); i++) {
t1 = (i+1)*3;
t2 = (i+1)*3+1;
t3 = (i+2)*3-1;
sheet.addMergedRegion(new CellRangeAddress(2, 2, t1,t3 ));
Cell cell = bt.createCell(t1);
cell.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cell.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString text = new HSSFRichTextString(cyly.get(i));
cell.setCellValue(text);
Cell createCell3 = bt.createCell(t2);
createCell3.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell3.setCellValue("");
Cell createCell4 = bt.createCell(t3);
createCell4.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell4.setCellValue("");
Cell cellSl = bt3.createCell(t1);
cellSl.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellSl.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textSl = new HSSFRichTextString("专利预审服务受理(件)");
cellSl.setCellValue(textSl);
Cell cellHg = bt3.createCell(t2);
cellHg.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellHg.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textHg = new HSSFRichTextString("专利预审合格量(件)");
cellHg.setCellValue(textHg);
Cell cellSq = bt3.createCell(t3);
cellSq.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellSq.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textSq = new HSSFRichTextString("专利授权量(件)");
cellSq.setCellValue(textSq);
}
//t3表示预审服务量的最后一列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 3, t3));
sheet.addMergedRegion(new CellRangeAddress(1, 1, t3+1, t3+2));
for (int n = 0; n < rowName.length; n++) {
Cell cellRowName = null;
if(n==4) {
cellRowName = bthead.createCell(t3+1);
}else {
cellRowName = bthead.createCell(n); // 创建列头对应个数的单元格
}
cellRowName.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellRowName.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
cellRowName.setCellValue(text); // 设置列头单元格的值
}
Cell createCell3 = bthead.createCell(t3+2);
createCell3.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell3.setCellValue("");
Cell createCell4 = bt3.createCell(t3+2);
createCell4.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell4.setCellValue("");
//标题
sheet.addMergedRegion(new CellRangeAddress(0,0,0,t3+2)); //36
Row head = sheet.createRow(0);
head.setHeight((short) 750); //设置表格标题的高度
Cell cellhead = head.createCell(0);
cellhead.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellhead.setCellStyle(columnTopStyle);
HSSFRichTextString texthead = new HSSFRichTextString(title);
cellhead.setCellValue(texthead);
for (int j = 1; j <= t3+2; j++) {
cellhead = head.createCell(j);
cellhead.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
cellhead.setCellValue("");
}
//预审周期
sheet.addMergedRegion(new CellRangeAddress(2, 3, t3+1, t3+1));
sheet.addMergedRegion(new CellRangeAddress(2, 3, t3+2, t3+2));
Cell cell = bt.createCell(t3+1);
cell.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cell.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString text = new HSSFRichTextString("当月平均预审周期(天)");
cell.setCellValue(text);
Cell cell2 = bt.createCell(t3+2);
cell2.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cell2.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString text2 = new HSSFRichTextString("预审周期超7个工作日案件量(件)");
cell2.setCellValue(text2);
Row btXj = null;
int n = 0;
int m = 0;
for (int j = 0; j < dataList.size(); j++) {
n = (j+1)*4;
m = (j+2)*4-1;
sheet.addMergedRegion(new CellRangeAddress(n, m, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(n, m, t3+1, t3+1));
Row btFm = sheet.createRow(n);
Cell cellMot = btFm.createCell(0);
cellMot.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellMot.setCellStyle(columnTopStyle); // 设置列头单元格样式
//当月平均预审周期(天)
Cell cellAvg = btFm.createCell(t3+1);
cellAvg.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellAvg.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textAvg = new HSSFRichTextString(dataList.get(j).getAvg());
cellAvg.setCellValue(textAvg);
HSSFRichTextString textMot = null;
String[] start = startM.split("-");
String[] end = endM.split("-");
if(start[0].equals(end[0])) {
String mc = dataList.get(j).getMc();
textMot = new HSSFRichTextString(mc.split("年")[1]);
}else {
textMot = new HSSFRichTextString(dataList.get(j).getMc());
}
cellMot.setCellValue(textMot);
Cell cellFm = btFm.createCell(1);
cellFm.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellFm.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textFm = new HSSFRichTextString("发明");
cellFm.setCellValue(textFm);
Row btSyxx = sheet.createRow(n+1);
Cell cellSyxx = btSyxx.createCell(1);
cellSyxx.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellSyxx.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textSyxx = new HSSFRichTextString("实用新型");
cellSyxx.setCellValue(textSyxx);
Row btWg = sheet.createRow(n+2);
Cell cellWg = btWg.createCell(1);
cellWg.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellWg.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textWg = new HSSFRichTextString("外观设计");
cellWg.setCellValue(textWg);
btXj = sheet.createRow(n+3);
Cell cellXj = btXj.createCell(1);
cellXj.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellXj.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textXj = new HSSFRichTextString("小计");
cellXj.setCellValue(textXj);
List<IppcYsMonthWorkTjTwoResponse> data = dataList.get(j).getData();
for (int i = 0; i < data.size(); i++) {
List<String> list = data.get(i).getData();
for (int k = 0; k < list.size(); k++) {
if(i==0) {
Cell cellFmNum = btFm.createCell(2+k);
cellFmNum.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellFmNum.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textFmNum = new HSSFRichTextString(list.get(k));
cellFmNum.setCellValue(textFmNum);
}else if(i==1) {
Cell cellSyxxNum = btSyxx.createCell(2+k);
cellSyxxNum.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellSyxxNum.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textSyxxNum = new HSSFRichTextString(list.get(k));
cellSyxxNum.setCellValue(textSyxxNum);
}else if(i==2) {
Cell cellWgNum = btWg.createCell(2+k);
cellWgNum.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellWgNum.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textWgNum = new HSSFRichTextString(list.get(k));
cellWgNum.setCellValue(textWgNum);
}else if(i==3) {
Cell cellXjNum = btXj.createCell(2+k);
cellXjNum.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellXjNum.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textXjNum = new HSSFRichTextString(list.get(k));
cellXjNum.setCellValue(textXjNum);
}
}
//预审周期超7个工作日案件量(件)
if(i==0) {
Cell cellOver7 = btFm.createCell(t3+2);
cellOver7.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellOver7.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textOver7 = new HSSFRichTextString(data.get(i).getOver7());
cellOver7.setCellValue(textOver7);
}else if(i==1) {
Cell cellOver7Syxxs = btSyxx.createCell(t3+2);
cellOver7Syxxs.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellOver7Syxxs.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textOver7Syxxs = new HSSFRichTextString(data.get(i).getOver7());
cellOver7Syxxs.setCellValue(textOver7Syxxs);
}else if(i==2) {
Cell cellOver7Wgs = btWg.createCell(t3+2);
cellOver7Wgs.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellOver7Wgs.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textOver7Wgs = new HSSFRichTextString(data.get(i).getOver7());
cellOver7Wgs.setCellValue(textOver7Wgs);
}else if(i==3) {
Cell cellOver7Xjs = btXj.createCell(t3+2);
cellOver7Xjs.setCellType(CellType.STRING); // 设置列头单元格的数据类型
cellOver7Xjs.setCellStyle(columnTopStyle); // 设置列头单元格样式
HSSFRichTextString textOver7Xjs = new HSSFRichTextString(data.get(i).getOver7());
cellOver7Xjs.setCellValue(textOver7Xjs);
}
}
}
Cell createCell5 = btXj.createCell(0);
createCell5.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell5.setCellValue("");
Cell createCell6 = btXj.createCell(t3+1);
createCell6.setCellStyle(cellStyle); //style为带边框的样式 上面有定义
createCell6.setCellValue("");
// 设置字体
HSSFFont font = xssfWorkbook.createFont();
// 设置字体大小
font.setFontHeightInPoints((short) 11);
// 字体加粗
font.setBold(true);
// 设置字体名字
font.setFontName("Courier New");
HSSFCellStyle styles = xssfWorkbook.createCellStyle();
styles.setAlignment(HorizontalAlignment.LEFT);
styles.setFont(font);
sheet.addMergedRegion(new CellRangeAddress(m+1, m+1, 0, 12));
Row createRow = sheet.createRow(m+1);
Cell createCell7 = createRow.createCell(0);
createCell7.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell7.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textJS = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxx");
createCell7.setCellValue(textJS);
sheet.addMergedRegion(new CellRangeAddress(m+2, m+2, 0, 12));
Row createRow2 = sheet.createRow(m+2);
Cell createCell8 = createRow2.createCell(0);
createCell8.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell8.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textSL = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
createCell8.setCellValue(textSL);
sheet.addMergedRegion(new CellRangeAddress(m+3, m+3, 0, 12));
Row createRow3 = sheet.createRow(m+3);
Cell createCell9 = createRow3.createCell(0);
createCell9.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell9.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textHG = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
createCell9.setCellValue(textHG);
sheet.addMergedRegion(new CellRangeAddress(m+4, m+4, 0, 12));
Row createRow4 = sheet.createRow(m+4);
Cell createCell10 = createRow4.createCell(0);
createCell10.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell10.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textSQ = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
createCell10.setCellValue(textSQ);
sheet.addMergedRegion(new CellRangeAddress(m+5, m+5, 0, 12));
Row createRow5 = sheet.createRow(m+5);
Cell createCell11 = createRow5.createCell(0);
createCell11.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell11.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textZQ = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
createCell11.setCellValue(textZQ);
sheet.createFreezePane(0, 4, 0, 4);//冻结
for (int j = 3; j <= t3+2; j++) {
sheet.setColumnWidth(j, 10*256);
}
sheet.setDefaultColumnWidth(10);
xssfWorkbook.write(out);
效果图
核心代码
其中最核心的代码如下:
HSSFWorkbook xssfWorkbook = new HSSFWorkbook(); //创建工作表对象
Sheet sheet = xssfWorkbook.createSheet(); //创建工作表
HSSFCellStyle styles = xssfWorkbook.createCellStyle();
styles.setAlignment(HorizontalAlignment.LEFT);
styles.setFont(font);
//通过下面这两行就可以锁定到具体的单元格了,之后就可以对其进行设置字体、样式等。
Row createRow5 = sheet.createRow(m+5);//创建行,其中参数为要创建的行数,从0开始算
Cell createCell11 = createRow5.createCell(0);//创建列,其中参数为要创建的列数,从0开始算
createCell11.setCellType(CellType.STRING); // 设置列头单元格的数据类型
createCell11.setCellStyle(styles); // 设置列头单元格样式
HSSFRichTextString textZQ = new HSSFRichTextString("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
createCell11.setCellValue(textZQ);//向单元格中存值
大体思路就是通过sheet对象创建对应的行,再通过行创建对应的列,然后就可以存值了。
如果想设置样式,可以通过createCellStyle()
先获取样式对象,之后就可以通过该对象设置想要的样式。如上面的styles.setAlignment(HorizontalAlignment.LEFT);
和styles.setFont(font);
。其中font是字体。
想要的样式创建好后,就可以通过createCell11.setCellStyle(styles);
方法来设置对应的样式了。
其中还有冻结createFreezePane()
、合并单元格sheet.addMergedRegion(new CellRangeAddress(m+5, m+5, 0, 12));
等方法可以通过官方文档或者查阅资料来获得。