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

使用Apache POI设置Word字体颜色异常,请求技术支持

问题解决:Apache POI 设置Word文本颜色失效

问题根源

你始终使用同一个XWPFRun对象添加所有文本,而XWPFRun代表Word段落中的连续文本块,它的样式是全局生效的。即使中途修改颜色,整个Run内的所有文本最终会统一应用最后一次设置的样式(Word解析时会强制统一Run的样式),导致所有文本颜色一致。

修正方案

为每个不同样式的文本段创建独立的XWPFRun实例,每个Run的样式仅作用于自身包含的文本。

修正后的代码

public class WordAutomation {

    public static String projectpath = System.getProperty("user.dir");
    public static FileOutputStream out;
    public static String ScreenshotPath = projectpath + "\\Screenshots\\";
    public static XWPFDocument docx;
    public static XWPFParagraph paragraph;
    public static String wordFile;


    public static void main(String[] args) throws IOException {

        docx = new XWPFDocument();
        paragraph = docx.createParagraph(); // 初始化段落
        wordFile = ScreenshotPath + "ScreenshotFile.docx";
        out = new FileOutputStream(wordFile);
    
        // 黑色文本:Test Started
        XWPFRun run = paragraph.createRun();
        run.setText("Test Started");
        run.addBreak();
        
        // 黑色文本:Pass场景
        run = paragraph.createRun();
        run.setText("Its a Pass scenario");
        run.addBreak();
        
        // 红色文本:Fail场景
        run = paragraph.createRun();
        run.setColor("ff0000");
        run.setText("Its a Fail scenario");
        run.addBreak();
        
        // 黑色文本:Pass场景
        run = paragraph.createRun();
        run.setColor("000000");
        run.setText("Its a Pass scenario");
        
        docx.write(out);
        out.flush();
        out.close();
        docx.close();
    }
}

说明

  • 一个Word段落可以包含多个XWPFRun,每个Run拥有独立的样式属性(颜色、字体、字号等)。
  • 每次需要切换文本样式时,调用paragraph.createRun()创建新的Run对象,即可保证当前样式仅作用于后续添加的文本。

内容的提问来源于stack exchange,提问作者Enock Prince

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:35:26