Java跨月数据按月分Excel打包成压缩包导出—开发记录

这篇博客记录了使用Java进行跨月数据的按月分Excel打包成压缩包的导出过程。通过接收AnnualQualityAssesReportForm参数,以日均发车间隔完成率明细为例,详细介绍了从设计导出记录表,到转换数据类型,生成XSSFWorkbook,再到将workbook转化为MultipartFile,最后进行压缩和删除原Excel文件的操作步骤。
摘要由CSDN通过智能技术生成

请求

<#-- 明细表导出-->
        $("#export").click(function () {
   
            let beginDate = $("#beginDate").val();
            let endDate = $("#endDate").val();
            let comName = $('#comName').combotree('getValues');
            let busiType = $('#busiType').combotree('getValues');
            let reportType = $("#reportType").val();
            if(!beginDate || !endDate){
   
                layer.alert("开始时间和结束时间都不能为空!");
                return ;
            }
            if (beginDate.substring(0,4) != endDate.substring(0,4)) {
   
                layer.alert("开始时间和结束时间必须为同一年!");
                return ;
            }
            layer.alert("导出执行中...");
            $.ajax({
   
                url:'detailExport',
                type:'POST',
                contentType: 'application/json;charset=utf-8',
                data: JSON.stringify({
   
                    'beginDate': beginDate,
                    'endDate': endDate,
                    'comName': comName,
                    'reportType': reportType,
                    'busiType': busiType,
                    'isAssessment': $('#isAssessment').val(),
                    'isUpStandard': $('#isUpStandard').val()
                }),
                success: function(data){
   

                }
            });
        });

入口

AnnualQualityAssesReportForm为接收参数实体

@RequestMapping("/detailExport")
    public void detailExport(@RequestBody AnnualQualityAssesReportForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
   
        if(form == null){
   
            return ;
        }
        form.setLimit(null);
        annualQualityAssesReportService.detailExport(request, response, form);
    }

明细导出有6种报表类型,这里以 日均发车间隔完成率明细导出 为例子

	/**
     * 质量考核明细表导出
     * @param request
     * @param response
     * @param form
     */
    public void detailExport(HttpServletRequest request, HttpServletResponse response, AnnualQualityAssesReportForm form) throws Exception {
   
        Object result = null;
        switch (form.getReportType()){
   
            case 1:    //高峰时段出车率
                detailPeakHourRateExport(request, response, form);
                break;
            case 2:    //高峰时段发车间隔完成率
                detailCompletionRateOfDepartIntervalPeakHoursExport(request, response, form);
                break;
            case 3:    //计划载客里程完成率
                detailCompletionRateOfPlanedPassengerMileageExport(request, response, form);
                break;
            case 4:    //首末班时间达标率
                detailStandardRateLineFirstAnfLastExport(request, response, form);
                break;
            case 5:    //运营趟次完成率
                detailCompletionRateOfassessmentAtripExport(request, response, form);
                break;
            case 6:  // 日均发车间隔完成率
                detailDayAvgStaratIntervalCompltRateExport(request, response, form);
                break;
        }
    }

先设计一个导出记录表

CREATE TABLE `t_export_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `export_name` varchar(100) DEFAULT NULL COMMENT '导入zip名',
  `function_flag` varchar(100) DEFAULT NULL COMMENT '功能标识',
  `export_start` datetime DEFAULT NULL COMMENT '导出开始时间',
  `export_end` datetime DEFAULT NULL COMMENT '导出结束时间',
  `export_user` varchar(40) DEFAULT NULL COMMENT '导出人',
  `export_status` int(11) DEFAULT NULL COMMENT '导出状态 0-导出中... 1-导出完毕',
  `export_path` varchar(100) DEFAULT NULL COMMENT '导出zip地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 COMMENT='导出记录表';
	/**
     * 日均发车间隔完成率明细导出
     *
     * @param request
     * @param response
     * @param form
     * @return void
     */
    private void detailDayAvgStaratIntervalCompltRateExport(HttpServletRequest request, HttpServletResponse response, AnnualQualityAssesReportForm form) throws Exception {
   
        String beginDate = form.getBeginDate();
        String endDate = form.getEndDate();
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        // 当前时间串yyyyMMddHHmmss
        String dateStr = format.format(date);
        // Excel标题及内容对应实体字段名
        String[] titles = {
   "业务版块", "分公司", "日期类型", "日期", "线路号", "日均发车间隔分钟数", "计划日趟次数", "实际日趟次数", "计划日均发车间隔", "实际日均发车间隔", "完成率", "标准", "是否考核", "是否达标"};
        String[] keys = {
   "busiType", "company", "weekDay", "signDate", "lineNo", "dayAvgStartIntervalMin", "dayPlanTimes", "dayRealTimes", "dayPlanAvgStartInterval", "dayRealAvgStartInterval", "completaRate", "standard", "isAssessment", "isUpStandard"};
        // 获取springboot下resources下statics路径
        String staticPath = ResourceUtils.getURL("classpath:").getPath() + "statics";
        // excel文件夹所在路径(功能+报表类型/当前时间串)
        String excelPath = staticPath + "/exportExcel/assessmentAnnualDetails" + form.getReportType() + "/" + dateStr;
        // 压缩包名
        String zipName = beginDate + "-" + endDate + "年度考核日均发车间隔完成率明细";
        // 压缩包文件真实路径
        String zipPath = staticPath + "/exportExcel/assessmentAnnualDetails" + form.getReportType() + "/" + zipName + dateStr + ".zip";
        // 压缩包文件相对项目的相对路径
        String zipRelPath = "/exportExcel/assessmentAnnualDetails" + form.getReportType() + "/" + zipName + dateStr + ".zip";
        // 插入导出记录表
        ExportRecord exportRecord = new ExportRecord();
        exportRecord.setFunctionFlag("assessmentAnnualDetails");
        exportRecord.setExportUser(Users.getCurrentUser().getLoginName());
        exportRecord.setExportStart(date);
        exportRecord.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你需要处理大量数据并将其导出Excel文件,可以使用Java的Apache POI库。而如果你想将导出Excel文件进行压缩,可以使用Java的ZipOutputStream类来创建压缩包。 以下是一个示例代码,它使用Apache POI库将数据导出Excel文件,并使用ZipOutputStream类将其压缩: ```java import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelZipExporter { public static void main(String[] args) { String[] headers = {"Name", "Age", "Email"}; Object[][] data = {{"John", 25, "john@example.com"}, {"Mary", 30, "mary@example.com"}}; try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("data.zip")); XSSFWorkbook workbook = new XSSFWorkbook()) { Sheet sheet = workbook.createSheet("Data"); Row headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); } for (int rowIndex = 1; rowIndex <= data.length; rowIndex++) { Row row = sheet.createRow(rowIndex); for (int colIndex = 0; colIndex < data[rowIndex - 1].length; colIndex++) { Cell cell = row.createCell(colIndex); cell.setCellValue(data[rowIndex - 1][colIndex].toString()); } } // Write Excel file workbook.write(new FileOutputStream("data.xlsx")); // Add Excel file to ZIP archive ZipEntry zipEntry = new ZipEntry("data.xlsx"); zipOut.putNextEntry(zipEntry); byte[] buffer = new byte[1024]; int length; try (FileInputStream fis = new FileInputStream("data.xlsx")) { while ((length = fis.read(buffer)) > 0) { zipOut.write(buffer, 0, length); } } zipOut.closeEntry(); } catch (IOException e) { e.printStackTrace(); } } } ``` 该代码将数据导出Excel文件,并将其添加到名为“data.xlsx”的ZIP文件中。你可以通过修改数据数组来添加更多数据导出更大的Excel文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值