使用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
相关产品推荐
相关产品推荐

