我的代码如下:
public class TestWord4 {
public static void main(String[] args) throws Exception {
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.startTable();
double[] colWidths = {30, 15, 20, 15, 20}; // 确保加起来等于100%
addHeaderRow(builder, colWidths);
addDataRows(builder, colWidths);
builder.endTable();
doc.save("output.docx");
}
private static void addHeaderRow(DocumentBuilder builder, double[] colWidths) {
// 第一行表头
insertMergedCell(builder, "核心企业名称", colWidths[0], CellMerge.FIRST, CellMerge.NONE);
insertMergedCell(builder, "业务规模/亿元", colWidths[1] + colWidths[2], CellMerge.NONE, CellMerge.FIRST);
builder.insertCell(); // 占位
builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
insertMergedCell(builder, "客商融资成本", colWidths[3] + colWidths[4], CellMerge.NONE, CellMerge.FIRST);
builder.insertCell(); // 占位
builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
builder.endRow();
// 第二行表头(子标题)
insertMergedCell(builder, "", colWidths[0], CellMerge.PREVIOUS, CellMerge.NONE); // 继续纵向合并
insertCell(builder, "当期", colWidths[1]);
insertCell(builder, "较去年同期", colWidths[2]);
insertCell(builder, "当期", colWidths[3]);
insertCell(builder, "较去年同期", colWidths[4]);
builder.endRow();
}
// 工具方法:插入合并单元格(支持纵向和横向合并)
private static void insertMergedCell(DocumentBuilder builder, String text, double width, int verticalMerge, int horizontalMerge) {
builder.insertCell();
builder.getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(width));
builder.getCellFormat().setVerticalMerge(verticalMerge);
builder.getCellFormat().setHorizontalMerge(horizontalMerge);
setCellStyle(builder, text);
}
// 工具方法:插入普通单元格
private static void insertCell(DocumentBuilder builder, String text, double width) {
builder.insertCell();
builder.getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(width));
builder.getCellFormat().setVerticalMerge(CellMerge.NONE);
builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
setCellStyle(builder, text);
}
// 工具方法:设置单元格样式
private static void setCellStyle(DocumentBuilder builder, String text) {
//单元格背景色
builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(128, 128, 128));
//字体颜色
builder.getFont().setColor(Color.BLACK);
//加粗
builder.getFont().setBold(true);
//字号
builder.getFont().setSize(10);
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
if (!text.isEmpty()) {
builder.write(text);
}
}
private static void addDataRows(DocumentBuilder builder, double[] colWidths) {
//字体颜色
builder.getFont().setColor(Color.BLACK);
//拒绝字体加粗
builder.getFont().setBold(false);
//这行代码禁用单元格中的文本自动换行功能
builder.getCellFormat().setWrapText(false);
builder.getRowFormat().setHeadingFormat(false); // 确保内容行不设置为表头
//字号
builder.getFont().setSize(10);
//默认背景色
builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(255, 255, 255));
for (int j = 0; j < 10; j++) {
String[] datas = {"1", "2", "3", "4", "5"};
for (int i = 0; i < datas.length; i++) {
builder.insertCell();
builder.getCellFormat().setVerticalMerge(CellMerge.NONE);
//builder.getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(colWidths[i]));
//builder.getRowFormat().setHeight(20); // Row height
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
builder.write(datas[i]);
}
builder.endRow();
}
}
}
设置列宽后,最后一列遭到挤压
如何自定义设置列宽