您可以使用Apache POI库来实现Excel表格中的合并操作。下面是一个示例代码,演示如何根据数据集合list中的数据合并单元格,并在合适的位置添加合计。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class ExcelMerge {

    public static void main(String[] args) {
        try (Workbook workbook = new XSSFWorkbook()) {
            Sheet sheet = workbook.createSheet("Sheet1");

            // 模拟数据集合list
            List<List<String>> dataList = Arrays.asList(
                    Arrays.asList("名称", "规格", "部门", "申请人", "数量"),
                    Arrays.asList("A", "S", "D1", "E1", "10"),
                    Arrays.asList("A", "S", "D1", "E1", "20"),
                    Arrays.asList("B", "T", "D2", "E2", "15"),
                    Arrays.asList("B", "T", "D2", "E2", "25"),
                    Arrays.asList("C", "U", "D3", "E3", "30")
            );

            int rowIndex = 0;

            // 遍历数据集合list
            for (List<String> data : dataList) {
                Row row = sheet.createRow(rowIndex++);

                int cellIndex = 0;

                // 遍历数据集合中的单元格数据
                for (String cellData : data) {
                    Cell cell = row.createCell(cellIndex++);
                    cell.setCellValue(cellData);
                }
            }

            // 合并单元格
            mergeCells(sheet, dataList);

            // 添加合计行
            addTotalRow(sheet, rowIndex);

            // 保存Excel文件
            try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
                workbook.write(outputStream);
            }

            System.out.println("Excel文件生成成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void mergeCells(Sheet sheet, List<List<String>> dataList) {
        for (int i = 1; i < dataList.size(); i++) {
            List<String> currentRow = dataList.get(i);
            List<String> previousRow = dataList.get(i - 1);

            // 判断名称数据是否相同
            if (currentRow.get(0).equals(previousRow.get(0))) {
                CellRangeAddress mergeRange = new CellRangeAddress(i - 1, i, 0, 0);
                sheet.addMergedRegion(mergeRange);
            }

            // 判断规格数据是否相同
            if (currentRow.get(1).equals(previousRow.get(1))) {
                CellRangeAddress mergeRange = new CellRangeAddress(i - 1, i, 1, 1);
                sheet.addMergedRegion(mergeRange);
            }

            // 判断部门数据是否相同
            if (currentRow.get(2).equals(previousRow.get(2))) {
                CellRangeAddress mergeRange = new CellRangeAddress(i - 1, i, 2, 2);
                sheet.addMergedRegion(mergeRange);
            }

            // 判断申请人数据是否相同
            if (currentRow.get(3).equals(previousRow.get(3))) {
                CellRangeAddress mergeRange = new CellRangeAddress(i - 1, i, 3, 3);
                sheet.addMergedRegion(mergeRange);
            }
        }
    }

    private static void addTotalRow(Sheet sheet, int rowIndex) {
        Row row = sheet.createRow(rowIndex);

        Cell cell = row.createCell(4);
        cell.setCellValue("合计");

        CellStyle cellStyle = sheet.getWorkbook().createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.RIGHT);
        cell.setCellStyle(cellStyle);

        CellUtil.createCell(row, 0, "", cellStyle);
        CellUtil.createCell(row, 1, "", cellStyle);
        CellUtil.createCell(row, 2, "", cellStyle);
        CellUtil.createCell(row, 3, "", cellStyle);

        CellUtil.createCell(row, 4, "SUM(E2:E" + rowIndex + ")", cellStyle);
    }
}

此代码将生成一个名为"output.xlsx"的Excel文件,实现了根据数据集合list中的数据进行单元格的合并,并在合适的位置添加了合计行

java poi execl表格根据数据集合list名称数据相同的单元格进行合并规格数据相同的单元格进行合并部门数据相同的单元格进行合并申请人数据相同的单元格进行合并 并且有合计

原文地址: https://www.cveoy.top/t/topic/hK9e 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录