Springboot POI导出Excel(浏览器)
public String stateCreateExcel(List
// 总数据条数
int dataSize = list.size();
// 线程数
int threadNum = 2;
int threadSize = dataSize / threadNum;
ExecutorService exec = Executors.newFixedThreadPool(threadNum);
//cutList 和输入list类型保持一致
List
// 第一步,创建一个webbook,对应一个Excel文件
XSSFWorkbook wb = new XSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
XSSFSheet sheet = wb.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);// 默认列宽
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
XSSFRow row = sheet.createRow((int) 0);
// 第四步,创建单元格,并设置值表头 设置表头居中
XSSFCellStyle style = wb.createCellStyle();
// 创建一个居中格式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 添加excel title
XSSFCell cell = null;
for (int i = 0; i < strArray.length; i++) {
cell = row.createCell((short) i);
cell.setCellValue(strArray[i]);
cell.setCellStyle(style);
}
List
Callable
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,list中字符串的顺序必须和数组strArray中的顺序一致
int startNum ;
System.out.println("任务开始,总数:"+list.size());
// 开始时间
long start = System.currentTimeMillis();
System.out.println("线程任务执行");
for (int i = 0; i < threadNum; i++) {
startNum = threadSize * i;
if (i == threadNum - 1) {
cutList = list.subList(threadSize * i, dataSize);
} else {
cutList = list.subList(threadSize * i, threadSize * (i + 1));
}
//listStr 和输入list类型保持一致
final List
int finalStartNum = startNum;
task = new Callable
final int s= finalStartNum;
@Override
public Integer call() throws Exception {
for(int j=0;j XSSFRow row =getRow(sheet,s+j); //设置每一列展示内容自己设置 row.createCell(0).setCellValue(listStr.get(j).getName()); row.createCell(1).setCellValue(listStr.get(j).getStartDateTime()); row.createCell(2).setCellValue(listStr.get(j).getEndDateTime()); row.createCell(3).setCellValue(listStr.get(j).getDateTime()); } return 1; } }; // 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系 tasks.add(task); } try { List } catch (Exception e) { e.printStackTrace(); } // 关闭线程池 exec.shutdown(); DownloadFileUtil.delfile(filePath); // 第六步,将文件存到指定位置 try { FileOutputStream fout = new FileOutputStream(filePath); wb.write(fout); fout.flush(); fout.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("线程任务执行结束"); System.err.println("执行任务消耗了 :" + (System.currentTimeMillis() - start) + "毫秒"); return filePath; }
相关文章
- Springboot POI导出Excel(浏览器)
- spring webClient配置及使用简单代码示例
- Springboot读取外部配置文件,项目部署时配置读取不到问题及解决
- SpringBoot自定义线程池,执行定时任务方式
- SpringSecurity中的Filter Chain(过滤器链)
- SpringData JPA 如何搭建 xml的配置方式
- Spring Boot之FilterRegistrationBean-自定义Filter详解
- Spring Cloud Gateway实现灰度发布方案
- Spring中MVC模块代码详解
- springtomize2怎么用 springtomize2教程及功能详细介绍(附springtomize2下载)