导入依赖或jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
jar包下载地址:
https://mvnrepository.com/artifact/org.apache.poi/poi/4.1.2
其他版本选择:
https://mvnrepository.com/artifact/org.apache.poi/poi
代码实现
execl ,可以使用`HSSFWorkbook`或`XSSFWorkbook`创建出来,分别对应(xls)和
(xlsx),如果对象和后缀混合使用的话,创建的execl表格在WPS中打开基本上是没问题的,
但在一些office中会出现文件打不开的问题,所以尽量与之对应使用。
调用方法示例
我用的是HSSFWorkbook
对象创建的xls
后缀名的execl文件
public void exportExcel(HttpServletResponse response,Pagination page){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
String year = df.format(new Date());
//表头数据
String[] title = {"标题1", "标题2", "标题3", "标题4", "标题5", "标题6", "标题7", "标题8", "标题9"};
//设置Excel文件名
String filename = "导出文件名称"+year+".xls";
//设置工作表名称
String sheetName = "sheet1";
String[][] content = null;
try {
//TODO 数据与循环存数据根据自己的需求更改
//根据条件获取数据
List<Map<String, Object>> listData = getMianListData(page);
//开始对从数据库中获取到的数据进行处理
content = new String[listData.size()][9];
for(int i =0;i < listData.size();i++){
content[i][0] = listData.get(i).get("content1").toString();
content[i][1] = listData.get(i).get("content2").toString();
content[i][2] = listData.get(i).get("content3").toString();
content[i][3] = listData.get(i).get("content4").toString();
content[i][4] = listData.get(i).get("content5").toString();
content[i][5] = listData.get(i).get("content6").toString();
content[i][6] = listData.get(i).get("content7").toString();
content[i][7] = listData.get(i).get("content8").toString();
content[i][8] = listData.get(i).get("content9").toString();
}
} catch (Exception e) {
e.printStackTrace();
}
//这里我是使用的是HSSFWorkbook 对象创建的,根据自己需要更改
HSSFWorkbook workbook = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
try {
this.setResponseHeader(response,filename);
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
-
使用
HSSFWorkbook
对象创建的execl表格,后缀名(xls)/** * 导出Excel * * @param sheetName sheet名称 * @param title 标题 * @param values 内容 * @param wb HSSFWorkbook对象 * @return */ public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) { // 第一步,创建一个HSSFWorkbook,对应一个Excel文件 if (wb == null) { wb = new HSSFWorkbook(); } // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 HSSFRow row = sheet.createRow(0); // 第四步,创建单元格,并设置值表头 设置表头居中 //设置字体 HSSFFont font = wb.createFont(); //设置字体名字 font.setFontName("微软雅黑"); //字体 //设置字体大小 font.setFontHeightInPoints((short)12); //设置样式; HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(IndexedColors.WHITE.getIndex()); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //设置底边框颜色; style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置顶边框颜色; style.setTopBorderColor(HSSFColor.BLACK.index); //在样式用应用设置的字体; style.setFont(font); //设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //声明列对象 HSSFCell cell = null; //创建标题 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); cell.setCellStyle(style); } //创建内容 for (int i = 0; i < values.length; i++) { row = sheet.createRow(i + 1); for (int j = 0; j < values[i].length; j++) { HSSFCell cell1 = row.createCell(j); //将内容按顺序赋给对应的列对象 cell1.setCellValue(values[i][j]); cell1.setCellStyle(style); } } for(int x = 0; x < title.length; x++){ sheet.autoSizeColumn((short)x); //调整列宽度 } return wb; }
-
使用
XSSFWorkbook
对象创建的execl表格,后缀名(xlsx)/** * 导出Excel * * @param sheetName sheet名称 * @param title 标题 * @param values 内容 * @param wb XSSFWorkbook对象 * @return */ public static XSSFWorkbook getXSSFWorkbook(String sheetName, String[] title, String[][] values, XSSFWorkbook wb) { // 第一步,创建一个HSSFWorkbook,对应一个Excel文件 if (wb == null) { wb = new XSSFWorkbook(); } // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 XSSFRow row = sheet.createRow(0); // 第四步,创建单元格,并设置值表头 设置表头居中 //设置字体 XSSFFont font = wb.createFont(); //设置字体名字 font.setFontName("微软雅黑"); //字体 //设置字体大小 font.setFontHeightInPoints((short)12); //设置样式; XSSFCellStyle style = wb.createCellStyle(); //添加白色背景颜色 style.setFillForegroundColor(IndexedColors.WHITE.getIndex()); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //设置底边框颜色; style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置顶边框颜色; style.setTopBorderColor(HSSFColor.BLACK.index); //在样式用应用设置的字体; style.setFont(font); //设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //声明列对象 XSSFCell cell = null; //创建标题 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); cell.setCellStyle(style); } //创建内容 for (int i = 0; i < values.length; i++) { row = sheet.createRow(i + 1); for (int j = 0; j < values[i].length; j++) { XSSFCell cell1 = row.createCell(j); //将内容按顺序赋给对应的列对象 cell1.setCellValue(values[i][j]); cell1.setCellStyle(style); } } for(int x = 0; x < title.length; x++){ sheet.autoSizeColumn((short)x); //调整列宽度 } return wb; }
问题解决
- 在office中打开会出现背景色是黑色的情况,解决方法:
给表格添加一个白色的背景色(提示:上面代码已添加!!)style.setFillForegroundColor(IndexedColors.WHITE.getIndex()); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);