赞
踩
ps:版本太高有概率发生slf4j的依赖冲突,版本改为4.1.2后冲突自动消失。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
有这种导出需求的必然都是在浏览器操作,所以直接controller请求:
/**
* 导出Excel
*/
@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();
}
Service
Workbook exportToExcel2();
@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> list = new ArrayList<>();
list.add(list1);
list.add(list2);
return ExcelWrite.writeToExcelByList(arr, list);
}
public static Workbook writeToExcelByList(String[] array, List<List> 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程序员
“有任何问题,可评论,我看到就会回复”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。