Java POI Excel 表格合并单元格:根据数据集合 List<AmcOfficeinfosUtil> 进行合并
您可以使用 Apache POI 库来操作 Excel 表格。以下是一个示例代码,展示如何根据数据集合合并相同的单元格并计算合计行。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelMergeCells {
public static void main(String[] args) {
List<AmcOfficeinfosUtil> dataList = getDataList(); // 获取数据集合
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet('Sheet1');
// 创建单元格样式
CellStyle headerStyle = createHeaderStyle(workbook);
CellStyle dataStyle = createDataStyle(workbook);
// 设置合并单元格的区域
Map<String, CellRangeAddress> mergedRegions = new HashMap<>();
// 写入表头
Row headerRow = sheet.createRow(0);
createHeaderCell(headerRow, 0, '数量', headerStyle);
createHeaderCell(headerRow, 1, '名称', headerStyle);
createHeaderCell(headerRow, 2, '规格', headerStyle);
createHeaderCell(headerRow, 3, '部门', headerStyle);
createHeaderCell(headerRow, 4, '申请人', headerStyle);
// 写入数据
int rowNum = 1;
for (AmcOfficeinfosUtil data : dataList) {
Row dataRow = sheet.createRow(rowNum);
createDataCell(dataRow, 0, data.getQuantity(), dataStyle);
createDataCell(dataRow, 1, data.getName(), dataStyle);
createDataCell(dataRow, 2, data.getSpecification(), dataStyle);
createDataCell(dataRow, 3, data.getDepartment(), dataStyle);
createDataCell(dataRow, 4, data.getApplicant(), dataStyle);
// 记录合并单元格的区域
String key = data.getName() + data.getSpecification() + data.getDepartment() + data.getApplicant();
if (mergedRegions.containsKey(key)) {
CellRangeAddress region = mergedRegions.get(key);
region.setLastRow(rowNum);
} else {
CellRangeAddress region = new CellRangeAddress(rowNum, rowNum, 0, 4);
mergedRegions.put(key, region);
}
rowNum++;
}
// 合并单元格
for (CellRangeAddress region : mergedRegions.values()) {
sheet.addMergedRegion(region);
}
// 添加合计行
Row totalRow = sheet.createRow(rowNum);
totalRow.createCell(0).setCellValue('合计');
totalRow.createCell(1);
totalRow.createCell(2);
totalRow.createCell(3);
totalRow.createCell(4).setCellValue(dataList.size());
// 自动调整列宽
for (int i = 0; i < 5; i++) {
sheet.autoSizeColumn(i);
}
// 保存文件
try (FileOutputStream fileOut = new FileOutputStream('output.xlsx')) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
}
private static List<AmcOfficeinfosUtil> getDataList() {
// 模拟数据集合
List<AmcOfficeinfosUtil> dataList = new ArrayList<>();
dataList.add(new AmcOfficeinfosUtil(1, '名称1', '规格1', '部门1', '申请人1'));
dataList.add(new AmcOfficeinfosUtil(2, '名称1', '规格1', '部门1', '申请人2'));
dataList.add(new AmcOfficeinfosUtil(3, '名称2', '规格2', '部门2', '申请人3'));
dataList.add(new AmcOfficeinfosUtil(4, '名称3', '规格3', '部门3', '申请人4'));
dataList.add(new AmcOfficeinfosUtil(5, '名称3', '规格3', '部门3', '申请人5'));
return dataList;
}
private static CellStyle createHeaderStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
return style;
}
private static CellStyle createDataStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
style.setWrapText(true);
return style;
}
private static void createHeaderCell(Row row, int column, String value, CellStyle style) {
Cell cell = row.createCell(column);
cell.setCellValue(value);
cell.setCellStyle(style);
}
private static void createDataCell(Row row, int column, Object value, CellStyle style) {
Cell cell = row.createCell(column);
if (value instanceof Number) {
cell.setCellValue(((Number) value).doubleValue());
} else {
cell.setCellValue(value.toString());
}
cell.setCellStyle(style);
}
}
class AmcOfficeinfosUtil {
private int quantity;
private String name;
private String specification;
private String department;
private String applicant;
public AmcOfficeinfosUtil(int quantity, String name, String specification, String department, String applicant) {
this.quantity = quantity;
this.name = name;
this.specification = specification;
this.department = department;
this.applicant = applicant;
}
public int getQuantity() {
return quantity;
}
public String getName() {
return name;
}
public String getSpecification() {
return specification;
}
public String getDepartment() {
return department;
}
public String getApplicant() {
return applicant;
}
}
上述代码中,getDataList()方法模拟了一个数据集合,您可以根据实际情况进行替换。createHeaderStyle()和createDataStyle()方法分别创建了表头和数据的单元格样式。createHeaderCell()和createDataCell()方法用于创建表头和数据的单元格。最后,通过Workbook对象的write()方法将数据写入文件中。
请注意,此示例使用了XSSF格式(.xlsx文件)。如果要使用HSSF格式(.xls文件),只需将Workbook workbook = new XSSFWorkbook();改为Workbook workbook = new HSSFWorkbook();即可。
原文地址: https://www.cveoy.top/t/topic/puoB 著作权归作者所有。请勿转载和采集!