项目场景:
需求须要做一个将sql查出来的数据导出为excel的功能,问了一下chat,给了我一个方案,是使用EasyExcel,试了一下用不起来,各种报错。纠结了一阵,换了个方法,自己写写excel的逻辑。
解决方案:
//要导出的数据List
List<EnterpriseExport> ExportList = getEnterpriseExports(enterpriseExport);
// 获取当前日期时间
Date currentDate = new Date();
// 定义日期时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
// 格式化当前日期时间
String formattedDateTime = dateFormat.format(currentDate);
// 构建新的文件名
String newFileName = "export_" + formattedDateTime;
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
// 生成 Excel 文件并写入字节数组输出流
ExcelExporter.exportToExcel("sheet", ExportList, outputStream);
// 将 ByteArrayOutputStream 转换为字节数组
byte[] bytes = outputStream.toByteArray();
// 将字节数组转换为 Base64 编码的字符串
String base64String = Base64.getEncoder().encodeToString(bytes);
enterpriseExportForm.setFileName(newFileName);
enterpriseExportForm.setExcelContent(base64String);
System.out.println("导出成功");
} catch (Exception e) {
// 处理异常
e.printStackTrace();
}
public class ExcelExporter {
public static byte[] exportToExcel(String sheetName, List<EnterpriseExport> dataList,ByteArrayOutputStream outputStream ) {
try {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet(sheetName);
// 写入表头
Row headerRow = sheet.createRow(0); List<String> headers = head().get(0);
for (int i = 0; i < headers.size(); i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers.get(i));
}
// 写入数据
for (int i = 0; i < dataList.size(); i++) {
Row dataRow = sheet.createRow(i + 1);
EnterpriseExport rowData = dataList.get(i);
// 设置数据行内容,这里需要根据实际情况设置每一列的数据
dataRow.createCell(0).setCellValue(rowData.getRnum().doubleValue());
dataRow.createCell(1).setCellValue(rowData.getAab004());
dataRow.createCell(2).setCellValue(rowData.getAab301Name());
dataRow.createCell(3).setCellValue(rowData.getBab001());
dataRow.createCell(4).setCellValue(rowData.getAab998());
dataRow.createCell(5).setCellValue(rowData.getAab022Name());
dataRow.createCell(6).setCellValue(rowData.getAab020Name());
dataRow.createCell(7).setCellValue(rowData.getDdz135());
dataRow.createCell(8).setCellValue(rowData.getAab019());
dataRow.createCell(9).setCellValue(rowData.getQylyrs().doubleValue());
// ... 其他数据列
}
// 将工作簿写入输出流
workbook.write(outputStream);
return outputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
//导出的excel表头
private static List<List<String>> head() {
List<List<String>> headList = new ArrayList<>();
List<String> headRow = new ArrayList<>();
headRow.add("序号");
headRow.add("单位名称");
headRow.add("区属");
headRow.add("单位编号");
headRow.add("社会统一信用代码");
headRow.add("行业类型");
headRow.add("类型");
headRow.add("名称");
headRow.add("性质");
headRow.add("人数");
headList.add(headRow); return headList;
}
}