再次做excel表格导出,这次记录完整点。先导入poi依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
<!-- poi-ooxml 包含了3.9的poi-ooxml-schemas,所以在此处排除掉 -->
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
然后看下导出的excel样式。
这里,我将这张单分为三个部分导出,表头,表体,表尾。分别设计其样式,在数据填充的时候设计样式。先看表头,从第一行开始,填写单据名称
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell=row.createCell(0);
//设置单元格内容
cell.setCellValue("*******订单");
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0,0,0,9));
因为表头这里行数是可确定的,所以直接一行行创建,给表头设计统一样式。
public static HSSFCellStyle sts1(HSSFWorkbook workbook){
HSSFFont font = workbook.createFont();
HSSFCellStyle styleList = workbook.createCellStyle();
HSSFFont fontList = workbook.createFont();
fontList.setFontHeightInPoints((short) 8);//字号
fontList.setFontName("宋体");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
styleList.setFont(font);
styleList.setWrapText(true);
return styleList;
}
详细操作展示
//在sheet里创建第2行
HSSFRow row2=sheet.createRow(1);
//创建列
HSSFCell cellrow3 =row2.createCell(0);
cellrow3.setCellValue("施工合同:");
cellrow3.setCellStyle(sts1(wkb));
HSSFCell cellrow4 =row2.createCell(5);
cellrow4.setCellValue("建单时间:");
cellrow4.setCellStyle(sts1(wkb));
//数据填充
row2.createCell(1).setCellValue(headDto.getWorkContract());
row2.createCell(6).setCellValue(headDto.getCreateDate());
//单元格合并
sheet.addMergedRegion(new CellRangeAddress(1,1,1,4));
sheet.addMergedRegion(new CellRangeAddress(1,1,6,9));
然后是表体,这里获取的数据决定表体的长度,在创建行的时候,循环遍历加上之前的表头行即可。然后设计其样式
HSSFCellStyle style = wkb.createCellStyle();
HSSFFont font = wkb.createFont();
font.setFontHeightInPoints((short) 10);//字号
font.setFontName("宋体");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平
style.setFont(font);
style.setWrapText(true);
在数据填充的时候,单元格设置样式即可。
最后是表体,这里就很简单了,简单的单元格合并就完事,上述代码中有单元格合并。这次的excel导出还是比较简单的,没有什么业务逻辑需要处理。