如何设置表格列所占比例

我的代码如下:

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();
        }
    }
}

设置列宽后,最后一列遭到挤压


如何自定义设置列宽

@JOOL 您应该取消注释builder.getCellFormat().setPreferredWidth(PreferredWidth.fromentPercent(colWidths[i]));在“addDataRow”中。