java 导出excel多个sheet参考

导出多个sheet

要求:

页面导出,同时导出四个sheet,不同的sheet展示内容不同

原理

分别查出四个sheet对应的数据,然后调用四次POI,所有数据一起写入,最后关闭流。

注意:

全量导出数据量的控制,大于20万是否自动分sheet,以及容错处理

参考以下代码
1:设置sheet格式以及标题

  @RequestMapping("/exportAllyScoreCount")
public void exportAllyScoreCount(HttpServletRequest request,HttpServletResponse response,TAllyParameterConfigDto dto){
data = new HashMap<>();
String reportDate=dto.getYearDate();
String fileName = System.currentTimeMillis()+"-"+reportDate+".xlsx";
  try {
        response.setHeader("Content-Disposition", "attachment; filename=".concat(fileName));
        response.setHeader("Connection", "close");
        response.setHeader("Content-Type", "application/vnd.ms-excel");
        OutputStream ouputStream = response.getOutputStream();
        /*合作商汇总得分*/
        List<List<String>> data0 = new ArrayList<List<String>>();
        List<TScoreCountDto> tScoreTotalDtos = mushAllytrialExportService.findTScoreTotalDtos(reportDate);
        for(TScoreCountDto tScoreCountDto : tScoreTotalDtos){
            List rowData = new ArrayList();
            rowData.add(tScoreCountDto.getAllyId());
            rowData.add(tScoreCountDto.getProvince());
            rowData.add(tScoreCountDto.getCity());
            rowData.add(tScoreCountDto.getCounty());
            rowData.add(tScoreCountDto.getBureau()+"");
            rowData.add(String.valueOf(tScoreCountDto.getMonthInterestScore()));
            rowData.add(String.valueOf(tScoreCountDto.getCapitalSocre()));
            rowData.add(String.valueOf(tScoreCountDto.getmTwoScore()));
            rowData.add(String.valueOf(tScoreCountDto.getYqtzScore()));
            rowData.add(String.valueOf(tScoreCountDto.getAllScore()));
            rowData.add(String.valueOf(tScoreCountDto.getGrading()));
            rowData.add(String.valueOf(tScoreCountDto.getProfitRate()));
            rowData.add(String.valueOf(tScoreCountDto.getaPlusRate()));
            rowData.add(String.valueOf(tScoreCountDto.getProfitCountRate()));
            data0.add(rowData);
        }
        /*合作商明细*/
        List<List<String>> data1 = new ArrayList<List<String>>();
        List<TIndexDetailDto> tIndexDetais = mushAllytrialExportService.findTIndexDetais(reportDate);

        for(TIndexDetailDto tIndexDetailDto : tIndexDetais){
            List rowData = new ArrayList();
            rowData.add(tIndexDetailDto.getAllyId());
            rowData.add(tIndexDetailDto.getProvince());
            rowData.add(tIndexDetailDto.getCity());
            rowData.add(tIndexDetailDto.getCounty());
            rowData.add(tIndexDetailDto.getBureau()+"");
            rowData.add(tIndexDetailDto.getFirstTenderYear());
            rowData.add(String.valueOf(tIndexDetailDto.getMonthInterestRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getCapitalRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getmTwoRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYqtzRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYearInterestRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYearCapitalRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYearMTwoRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYearYqtzRateScore()));
            rowData.add(String.valueOf(tIndexDetailDto.getYearSumScore()));
            data1.add(rowData);
        }

        /*得分算法*/
        List<List<String>> data2 = new ArrayList<List<String>>();
        List<TScoreDto> tScores = mushAllytrialExportService.findTScores(dto);
        for(TScoreDto tScoreDto : tScores){
            List rowData = new ArrayList();
            rowData.add(tScoreDto.getYearDate());
            rowData.add(tScoreDto.getNormName());
            rowData.add(String.valueOf(tScoreDto.getNormWeight()));
            rowData.add(tScoreDto.getMaxScore()*100+"%");
            rowData.add(tScoreDto.getMinScore()*100+"%");
            data2.add(rowData);
        }
        /*分级算法参数*/
        List<List<String>> data3 = new ArrayList<List<String>>();
        List<TClassificationDto> classifications = mushAllytrialExportService.findClassifications(dto);
        for(TClassificationDto tClassificationDto : classifications){
            List rowData = new ArrayList();
            rowData.add(tClassificationDto.getClassificationProject());
            rowData.add(tClassificationDto.getClassificationS());
            rowData.add(tClassificationDto.getScore());
            rowData.add(tClassificationDto.getLimitYear());
            rowData.add(tClassificationDto.getLimitMoney());
            data3.add(rowData);
        }
        /*分润算法*/
        List<List<String>> data4 = new ArrayList<List<String>>();
        List<TProfitDto> tProfits = mushAllytrialExportService.findTProfits(dto);
        for(TProfitDto tProfitDto : tProfits){
            List rowData = new ArrayList();
            rowData.add(tProfitDto.getProfitArea());
            rowData.add(tProfitDto.getMaxScore());
            rowData.add(tProfitDto.getMinScore());
            rowData.add(tProfitDto.getMaxScoreRatio()*100 + "%");
            rowData.add(tProfitDto.getMinScoreRatio()*100 + "%");
            rowData.add(String.valueOf(tProfitDto.getProfitADoor()));
            rowData.add(String.valueOf(tProfitDto.getProfitADoor()));
            rowData.add(tProfitDto.getaRatio()*100+"%");
            data4.add(rowData);
        }




        String[] headers0 = { "合作商ID","省", "市","县","局","三农当月还息率总得分","三农当月本金结清率总得分","三农M不良率2总得分","三农YQTZ率总得分","总分","分级","分润系数","A+系数","分润总系数"};
        String[] headers1 = { "合作商ID","省", "市","县","局","首标年份","三农当月利息还息率得分","三农当月本金结清率得分","三农M不良率2得分","三农YQTZ率得分","三农当月利息还息率年得分","三农本金结清率年得分","三农M不良率2年得分","三农YQTZ率年得分","年总分"};
        String[] headers2 = { "年份","指标名称", "权重","最高分限","最低分限"};
        String[] headers3 = { "类型","级别", "分级得分","年限","存量上限(万)"};
        String[] headers4 = { "区域","分数上限", "分数下限","比率上限","比率下限","分润门槛(万)","A+门槛(万)","A+比率"};
        ExportExcelUtils eeu = new ExportExcelUtils();
        XSSFWorkbook workbook = new XSSFWorkbook();
        eeu.exportExcel(workbook, 0, "得分统计表", headers0, data0, ouputStream);
        eeu.exportExcel(workbook, 1, "合作商指标明细", headers1, data1, ouputStream);
        eeu.exportExcel(workbook, 2, "得分算法", headers2, data2, ouputStream);
        eeu.exportExcel(workbook, 3, "分级算法", headers3, data3, ouputStream);
        eeu.exportExcel(workbook, 4, "分润算法", headers4, data4, ouputStream);
        //原理就是将所有的数据一起写入,然后再关闭输入流。
        workbook.write(ouputStream);
        ouputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


2:填充数据

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.*;
/**
 * @Title: exportExcel
 * @Description: 导出Excel的方法
 * @param workbook
 * @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet)
 * @param sheetTitle  (sheet的名称)
 * @param headers    (表格的标题)
 * @param result   (表格的数据)
 * @param out  (输出流)
 * @throws Exception
 */
public void exportExcel(XSSFWorkbook workbook, int sheetNum,
                        String sheetTitle, String[] headers, List<List<String>> result,
                        OutputStream out) throws Exception {
    // 生成一个表格
    XSSFSheet sheet = workbook.createSheet();
    workbook.setSheetName(sheetNum, sheetTitle);
    // 设置表格默认列宽度为20个字节
    sheet.setDefaultColumnWidth((short) 20);
    // 生成一个样式
    XSSFCellStyle style = workbook.createCellStyle();
    // 设置这些样式
    style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    // 生成一个字体
    XSSFFont font = workbook.createFont();
    font.setColor(HSSFColor.BLACK.index);
    font.setFontHeightInPoints((short) 12);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    // 把字体应用到当前的样式
    style.setFont(font);

    // 指定当单元格内容显示不下时自动换行
    style.setWrapText(true);

    // 产生表格标题行
    XSSFRow row = sheet.createRow(0);
    for (int i = 0; i < headers.length; i++) {
        XSSFCell cell = row.createCell((short) i);

        cell.setCellStyle(style);
        HSSFRichTextString text = new HSSFRichTextString(headers[i]);
        cell.setCellValue(text.toString());
    }
    // 遍历集合数据,产生数据行
    if (result != null) {
        int index = 1;
        for (List<String> m : result) {
            row = sheet.createRow(index);
            int cellIndex = 0;
            for (String str : m) {
                XSSFCell cell = row.createCell((short) cellIndex);
                cell.setCellValue(str);
                cellIndex++;
            }
            index++;
        }
    }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 好的,这是一个关于Java操作Excel的问题,我可以回答。要在Java导出多个SheetExcel,你需要使用Apache POI这个Java库。以下是一个示例代码,可以在Java导出包含多个SheetExcel文件: ``` import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelExportExample { public static void main(String[] args) { try (Workbook workbook = new XSSFWorkbook()) { // 创建Sheet1 Sheet sheet1 = workbook.createSheet("Sheet1"); // 创建Sheet2 Sheet sheet2 = workbook.createSheet("Sheet2"); // 写入Sheet1数据 Cell cell11 = sheet1.createRow(0).createCell(0); cell11.setCellValue("Sheet1-Row1-Cell1"); // 写入Sheet2数据 Cell cell21 = sheet2.createRow(0).createCell(0); cell21.setCellValue("Sheet2-Row1-Cell1"); // 导出Excel文件 try (FileOutputStream outputStream = new FileOutputStream("example.xlsx")) { workbook.write(outputStream); } System.out.println("Excel导出成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例代码中,我们使用XSSFWorkbook创建了一个新的Excel文件。然后我们创建了两个Sheet,分别是"Sheet1"和"Sheet2"。接着我们在每个Sheet中创建了一个单元格,并写入了一些数据。最后我们使用FileOutputStream将Excel文件写入磁盘中。 希望这个示例能够帮助到你! ### 回答2: 在Java中,我们可以使用Apache POI库来导出多个sheetExcel文件。下面是一个简单的示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class ExcelExporter { public static void main(String[] args) { try (Workbook workbook = new XSSFWorkbook()) { // 创建第一个sheet Sheet sheet1 = workbook.createSheet("Sheet1"); // 创建第一个sheet的第一行,并设置数据 Row row1 = sheet1.createRow(0); Cell cell1 = row1.createCell(0); cell1.setCellValue("Sheet1中的第一行,第一列的数据"); // 创建第二个sheet Sheet sheet2 = workbook.createSheet("Sheet2"); // 创建第二个sheet的第一行,并设置数据 Row row2 = sheet2.createRow(0); Cell cell2 = row2.createCell(0); cell2.setCellValue("Sheet2中的第一行,第一列的数据"); // 保存Excel文件 try (FileOutputStream outputStream = new FileOutputStream("多个sheetExcel文件.xlsx")) { workbook.write(outputStream); } System.out.println("Excel文件导出成功"); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码使用了Apache POI库的`XSSFWorkbook`类来创建一个新的Excel文件。我们使用`createSheet`方法来创建多个sheet,并使用`createRow`和`createCell`方法来创建行和单元格,并设置相应的数据。最后,使用`FileOutputStream`将Workbook对象写入到文件中。 以上代码只是一个简单的示例,您可以根据自己的需求来设置更多的行和单元格,并可以为每个sheet设置不同的数据。希望对您有帮助! ### 回答3: 在Java中,可以使用Apache POI库来导出Excel多个sheet。首先,你需要在你的项目中包含Apache POI库的依赖。 接下来,你可以创建一个Workbook对象,该对象代表整个Excel文档。使用Workbook对象的createSheet方法可以创建一个新的sheet。你可以使用sheet的setName方法来设置sheet的名称。 然后,你可以使用Row和Cell对象来创建和填充sheet中的行和单元格。使用Row对象的createCell方法可以创建一个新的单元格,然后使用Cell对象的setCellValue方法来设置单元格的值。 最后,将生成的数据写入到Excel文件中。你可以使用Workbook对象的write方法将Workbook对象中的数据写入到文件中。 以下是一个简单的示例代码来导出多个sheetExcel文件: ```java import org.apache.poi.ss.usermodel.*; import java.io.FileOutputStream; import java.io.IOException; public class ExportExcelMultiSheet { public static void main(String[] args) { Workbook workbook = new XSSFWorkbook(); createSheet(workbook, "Sheet1"); createSheet(workbook, "Sheet2"); createSheet(workbook, "Sheet3"); try (FileOutputStream fileOut = new FileOutputStream("output.xlsx")) { workbook.write(fileOut); } catch (IOException e) { e.printStackTrace(); } System.out.println("Excel文件导出成功!"); } private static void createSheet(Workbook workbook, String sheetName) { Sheet sheet = workbook.createSheet(sheetName); Row headerRow = sheet.createRow(0); Cell headerCell = headerRow.createCell(0); headerCell.setCellValue(sheetName + " Header"); Row dataRow = sheet.createRow(1); Cell dataCell = dataRow.createCell(0); dataCell.setCellValue(sheetName + " Data"); } } ``` 上述代码创建了一个名为"output.xlsx"的Excel文件,其中包含了三个sheet,分别为"Sheet1"、"Sheet2"和"Sheet3"。每个sheet中都包含了一个标题行和一个数据行。 希望上述信息能够帮助到你!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值