1、增加依赖
ps:版本太高有概率发生slf4j的依赖冲突,版本改为4.1.2后冲突自动消失。
2、Controller书写org.apache.poi poi-ooxml 4.1.2 org.apache.poi poi 4.1.2
有这种导出需求的必然都是在浏览器操作,所以直接controller请求:
@GetMapping("exportToExcel")
public void exportToExcel(HttpServletResponse response) throws IOException {
Workbook wb = homePageManager.exportToExcel();
OutputStream output = response.getOutputStream();
String fileName = "接入详情.xlsx";
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ";" + "filename*=utf-8''" + fileName);
wb.write(output);
output.close();
}
3、Service书写
Service
Workbook exportToExcel2();
ServiceImpl
@Override
public Workbook exportToExcel() {
//这是表头
String[] arr = {"名称","年龄"};
//这是具体数据
List list1 = new ArrayList<>();
list1.add("张三");
list1.add("18");
List list2 = new ArrayList<>();
list2.add("李四");
list2.add("33");
List list = new ArrayList<>();
list.add(list1);
list.add(list2);
return ExcelWrite.writeToExcelByList(arr, list);
}
4、具体的Excel方法
public static Workbook writeToExcelByList(String[] array, List5、效果图list) { //创建工作薄 Workbook wb = new XSSFWorkbook(); //标题和页码 CellStyle titleStyle = wb.createCellStyle(); // 设置单元格对齐方式,水平居左 titleStyle.setAlignment(HorizontalAlignment.LEFT); // 设置字体样式 Font titleFont = wb.createFont(); // 字体高度 titleFont.setFontHeightInPoints((short) 12); // 字体样式 titleFont.setFontName("黑体"); titleStyle.setFont(titleFont); //创建sheet Sheet sheet = wb.createSheet("接入详情"); // 自动设置宽度 sheet.autoSizeColumn(0); // 在sheet中添加标题行// 行数从0开始 Row row = sheet.createRow((int) 0); for (int i = 0; i < array.length; i++) { Cell cell = row.createCell(i); cell.setCellValue(array[i]); cell.setCellStyle(titleStyle); } // 数据样式 因为标题和数据样式不同 需要分开设置 不然会覆盖 CellStyle dataStyle = wb.createCellStyle(); // 设置居中样式,水平居中 dataStyle.setAlignment(HorizontalAlignment.CENTER); //数据从序号1开始 try { int index = 1; for (List value : list) { // 默认的行数从0开始,为了统一格式设置从1开始,就是从excel的第二行开始 row = sheet.createRow(index); index++; List data = value; for (int j = 0; j < data.size(); j++) { Cell cell = row.createCell(j); // 为当前列赋值 cell.setCellValue(data.get(j).toString()); //设置数据的样式 cell.setCellStyle(dataStyle); } } } catch (Exception e) { e.printStackTrace(); } return wb; }
我试了好多遍都可行,代码直接照抄就行,处理少部分需要修改,肯定能够成功。
在postman测试的话,只需要如下操作:
–我是“道祖且长”,一个在互联网"苟且偷生"的Java程序员
“有任何问题,可评论,我看到就会回复”



