0
目前我正在处理需要自动生成文档的项目。到目前为止,我成功地使用docx4j在.docx中用用户输入的字段替换占位符,并在占位符上添加了一个.png图像。 现在,我需要在.docx上的特定占位符上附加一个Excel表格。请给我建议一些技巧来做同样的事情。将excel附加到使用docx4j(或任何其他api)的.docx
谢谢。
目前我正在处理需要自动生成文档的项目。到目前为止,我成功地使用docx4j在.docx中用用户输入的字段替换占位符,并在占位符上添加了一个.png图像。 现在,我需要在.docx上的特定占位符上附加一个Excel表格。请给我建议一些技巧来做同样的事情。将excel附加到使用docx4j(或任何其他api)的.docx
谢谢。
您应该添加XLSX为EmbeddedPackagePart
主文档部件都需要指向它,使用类似于XML:
<w:p>
<w:r>
<w:object w:dxaOrig="23793" w:dyaOrig="13287">
<v:shapetype stroked="f" filled="f" o:spt="75.0" o:preferrelative="t" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" coordsize="21600,21600" id="_x0000_t75">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"/>
<o:lock aspectratio="t" v:ext="edit"/>
</v:shapetype>
<v:shape type="#_x0000_t75" style="width:1189.5pt;height:664.5pt" id="_x0000_i1025" o:ole="">
<v:imagedata o:title="" r:id="rId5"/>
</v:shape>
<o:OLEObject Type="Embed" ProgID="Excel.Sheet.12" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1479233503" r:id="rId6"/>
</w:object>
</w:r>
</w:p>
注2个相对IDS;在这个例子中,rId6指向Emmbedded部分,rId5指向图像出现在文档表面(您需要自己创建)。
你可以编写代码来自己生成上述代码。另外,商业docx企业版会为你做。
可以分享相同的代码吗?在网上找不到这方面的信息。我是docx4j的新手。 – 2014-12-04 11:39:19
@PraveEnKamaTh如上:“您可以编写代码来生成上述自己。或者,*商业docx企业版将为您做。*” – Ben 2014-12-04 15:52:25
好吧,我已成功将excel附加到docx .....现在问题是否需要接受xls和xlsx文件格式。 将.xls附加到.docx的代码: OleObjectBinaryPart olePart = new OleObjectBinaryPart(); \t olePart.setBinaryData(oleFile); \t关系relOleObject = template.getMainDocumentPart()。addTargetPart(olePart); 请提供将.xlsx附加到.docx的解决方案 – 2015-01-15 12:37:26