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

使用Apache POI在Word中嵌入可双击打开的CSV对象(Java)

在Apache POI生成的Word中嵌入可双击打开的CSV文件

你可以通过Apache POI的XWPFObject类实现嵌入CSV文件,双击时系统会用关联程序(通常是Excel)打开它。以下是基于你现有代码修改的完整示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFObject;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.TargetMode;

public class EmbedCsvInWord {
    public static void main(String[] args) {
        XWPFDocument doc = new XWPFDocument();
        try(OutputStream os = new FileOutputStream("TestResults.docx");
            FileInputStream csvInputStream = new FileInputStream("data.csv")) { // 替换为你的CSV文件路径

            // 原有段落内容
            XWPFParagraph paragraph = doc.createParagraph();
            XWPFRun run = paragraph.createRun();
            run.setText("Hello, This is Test Execution Results. This paragraph is written by using XWPFParagraph.");

            // 添加新段落放置嵌入对象
            XWPFParagraph embedPara = doc.createParagraph();
            XWPFRun embedRun = embedPara.createRun();

            // 创建嵌入对象
            XWPFObject oleObject = embedRun.createOleObject();
            PackagePart olePart = oleObject.getPackagePart();

            // 将CSV内容写入OLE部件
            try(OutputStream oleOut = olePart.getOutputStream()) {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = csvInputStream.read(buffer)) != -1) {
                    oleOut.write(buffer, 0, bytesRead);
                }
            }

            // 设置OLE对象属性:关联Excel打开CSV
            PackageRelationship rel = olePart.addRelationship(
                olePart.getURI(), 
                TargetMode.INTERNAL, 
                "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"
            );
            oleObject.setId(rel.getId());
            oleObject.setProgId("Excel.Sheet.12"); // 指定用Excel打开
            oleObject.setShapeId(1);
            // 设置显示的图标和标签
            oleObject.setDrawAspect("Icon");
            oleObject.setLabel("测试数据.csv");

            doc.write(os);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

关键说明:

  • ProgID设置:使用Excel.Sheet.12确保双击时系统调用Excel打开CSV文件,若需用其他程序可修改对应的ProgID
  • 文件路径:替换data.csv为你实际的CSV文件路径
  • 显示设置:setDrawAspect("Icon")让嵌入对象显示为图标,setLabel设置图标下方的文本标签
  • 格式注意:建议将生成的Word后缀改为.docx,这是Apache POI支持的OOXML格式,兼容性更好

内容的提问来源于stack exchange,提问作者Rajesh Om

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:50