Java 使用 Apache POI 创建 Excel 文件 - 劳务费明细表
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.stream.IntStream;
public class CreateWorkbook {
private static final int COLUMN_WIDTH_0 = 25 * 256;
private static final int COLUMN_WIDTH_1 = 12 * 256;
private static final int COLUMN_WIDTH_2 = 20 * 256;
private static final int COLUMN_WIDTH_3 = 25 * 256;
private static final int COLUMN_WIDTH_4 = 15 * 256;
private static final int COLUMN_WIDTH_5 = 15 * 256;
private static final int COLUMN_WIDTH_6 = 20 * 256;
private static final int COLUMN_WIDTH_7 = 20 * 256;
private static final int COLUMN_WIDTH_8 = 12 * 256;
private static final int COLUMN_WIDTH_9 = 12 * 256;
private static final int COLUMN_WIDTH_10 = 12 * 256;
private static final String SHEET_NAME = '劳务费明细';
private static final String TITLE = 'XX基金会专家劳务报酬明细表';
private static final String PROJECT_NAME = '基金会合作项目';
private static final String PROJECT_DATE = '2023-3-13';
private static final String[] HEADER_TITLES = {
'序号', '姓名', '身份证号码', '单位名称', '电话号码', '银行所在省市',
'开户银行及支行', '银行卡号', '应发含税金额(税前)', '个税', '实发税后金额(税后)'
};
public static Workbook createWorkbook() {
try (Workbook workbook = new XSSFWorkbook()) {
// 创建 Sheet 对象
Sheet sheet = workbook.createSheet(SHEET_NAME);
// 设置列宽度
sheet.setColumnWidth(0, COLUMN_WIDTH_0);
sheet.setColumnWidth(1, COLUMN_WIDTH_1);
sheet.setColumnWidth(2, COLUMN_WIDTH_2);
sheet.setColumnWidth(3, COLUMN_WIDTH_3);
sheet.setColumnWidth(4, COLUMN_WIDTH_4);
sheet.setColumnWidth(5, COLUMN_WIDTH_5);
sheet.setColumnWidth(6, COLUMN_WIDTH_6);
sheet.setColumnWidth(7, COLUMN_WIDTH_7);
sheet.setColumnWidth(8, COLUMN_WIDTH_8);
sheet.setColumnWidth(9, COLUMN_WIDTH_9);
sheet.setColumnWidth(10, COLUMN_WIDTH_10);
// 创建标题行
createTitleRow(workbook, sheet);
// 创建表头行
createHeaderRow(workbook, sheet);
// 创建数据行
createDataRows(workbook, sheet);
// 创建合计行
createFooterRow(workbook, sheet);
return workbook;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 创建标题行
private static void createTitleRow(Workbook workbook, Sheet sheet) {
Row row = sheet.createRow(0);
row.setHeightInPoints(50);
CellStyle cellStyle = createTitleCellStyle(workbook);
Cell cell = row.createCell(0);
cell.setCellValue(TITLE);
cell.setCellStyle(cellStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10));
// 设置剩余的单元格内容
for (int i = 1; i <= 10; i++) {
cell = row.createCell(i);
cell.setCellValue('');
}
}
// 创建表头行
private static void createHeaderRow(Workbook workbook, Sheet sheet) {
Row headerRow = sheet.createRow(3);
headerRow.setHeightInPoints(40);
CellStyle headerCellStyle = createHeaderCellStyle(workbook);
for (int i = 0; i < HEADER_TITLES.length; i++) {
Cell headCell = headerRow.createCell(i);
headCell.setCellStyle(headerCellStyle);
headCell.setCellValue(HEADER_TITLES[i]);
}
}
// 创建数据行
private static void createDataRows(Workbook workbook, Sheet sheet) {
CellStyle dataCellStyle = createDataCellStyle(workbook);
IntStream.range(0, 15).forEach(i -> {
Row dataRow = sheet.createRow(4 + i);
dataRow.setHeightInPoints(30);
IntStream.range(0, 11).forEach(j -> {
Cell dataCell = dataRow.createCell(j);
dataCell.setCellValue('数据' + i + '-' + j);
dataCell.setCellStyle(dataCellStyle);
});
});
}
// 创建合计行
private static void createFooterRow(Workbook workbook, Sheet sheet) {
Row footerRow = sheet.createRow(19);
footerRow.setHeightInPoints(40);
CellStyle footerCellStyle = createFooterCellStyle(workbook);
Cell footerCell = footerRow.createCell(0);
footerCell.setCellStyle(footerCellStyle);
footerCell.setCellValue('合计');
double sumAmount = 16;
double sumTax = 32;
double sumNetAmount = 48;
footerCell = footerRow.createCell(8);
footerCell.setCellStyle(footerCellStyle);
footerCell.setCellValue(sumAmount);
footerCell = footerRow.createCell(9);
footerCell.setCellStyle(footerCellStyle);
footerCell.setCellValue(sumTax);
footerCell = footerRow.createCell(10);
footerCell.setCellStyle(footerCellStyle);
footerCell.setCellValue(sumNetAmount);
}
// 创建标题单元格样式
private static CellStyle createTitleCellStyle(Workbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
Font font = workbook.createFont();
font.setColor(Font.COLOR_NORMAL);
font.setBold(true);
font.setFontHeightInPoints((short) 18);
cellStyle.setFont(font);
return cellStyle;
}
// 创建表头单元格样式
private static CellStyle createHeaderCellStyle(Workbook workbook) {
CellStyle headerCellStyle = workbook.createCellStyle();
headerCellStyle.setWrapText(true);
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerCellStyle.setFont(headerFont);
headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
return headerCellStyle;
}
// 创建数据单元格样式
private static CellStyle createDataCellStyle(Workbook workbook) {
CellStyle dataCellStyle = workbook.createCellStyle();
dataCellStyle.setWrapText(true);
dataCellStyle.setAlignment(HorizontalAlignment.CENTER);
dataCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
return dataCellStyle;
}
// 创建合计单元格样式
private static CellStyle createFooterCellStyle(Workbook workbook) {
CellStyle footerCellStyle = workbook.createCellStyle();
Font footerFont = workbook.createFont();
footerFont.setBold(true);
footerCellStyle.setFont(footerFont);
footerCellStyle.setAlignment(HorizontalAlignment.CENTER);
footerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
return footerCellStyle;
}
}
原文地址: http://www.cveoy.top/t/topic/lO3O 著作权归作者所有。请勿转载和采集!