java excel导出

项目场景:

需求须要做一个将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;
    }


}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脆皮瞎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值