You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI生成的文本框样式与Excel原生文本框不符该如何调整

POI文本框与Excel原生文本框对比

POI默认生成的XSSF文本框自带白色填充、默认粗边框,和Excel原生插入的文本框默认样式不一致,你可以在设置文本的代码后补充样式配置,修改后的完整代码如下:

import org.apache.poi.sl.usermodel.LineStyle;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.main.CTShape;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public void TestXSSFPatriarch(String fileName, String richText) {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("hssf");
    XSSFDrawing xssfDrawing = sheet.createDrawingPatriarch();
    XSSFTextBox xssfTextBox = xssfDrawing.createTextbox(
            new XSSFClientAnchor(0, 0, 25, 50, (short) 0, 0, (short) 25, 50));
    xssfTextBox.setText(new XSSFRichTextString(richText));

    // 新增以下样式配置,匹配Excel原生文本框默认效果
    // 1. 关闭默认白色填充
    xssfTextBox.setNoFill(true);
    // 2. 设置边框为1pt黑色实线,和原生默认一致
    xssfTextBox.setLineWidth(1);
    xssfTextBox.setLineStyle(LineStyle.SOLID);
    xssfTextBox.setLineStyleColor(0, 0, 0);
    // 3. 调整文本内边距、垂直对齐规则匹配原生表现
    CTShape ctShape = xssfTextBox.getCTShape();
    CTTextBody ctTextBody = ctShape.getTxBody();
    CTTextBodyProperties bodyPr = ctTextBody.getBodyPr();
    // 内边距单位为EMU,1pt = 12700 EMU,以下是Excel原生默认的内边距参数
    bodyPr.setLIns(91440); // 左内边距7.2pt
    bodyPr.setRIns(91440); // 右内边距7.2pt
    bodyPr.setTIns(45720); // 上内边距3.6pt
    bodyPr.setBIns(45720); // 下内边距3.6pt
    // 文本垂直靠上对齐
    bodyPr.setAnchor(STTextAnchoringType.TOP);

    try (OutputStream fileOut = new FileOutputStream(fileName)) {
        workbook.write(fileOut);
        System.out.println("Success");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果你需要完全去掉边框,只要把边框设置的三行代码替换为xssfTextBox.setLineStyle(LineStyle.NONE)即可。

内容的提问来源于stack exchange,提问作者Sam Si

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:06:05