使用docx4j(或任何其他api)将excel附加到.docx

目前我正在开发一个需要自动生成文档的项目。 到目前为止,我成功地使用docx4jreplace了用户input的.docx字段的占位符,并在占位符上添加了一个.png图像。 现在,我需要在.docx上的特定占位符上附加一个Excel工作表。 请build议我一些技巧来做同样的事情。

谢谢。

您应该将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="m@4@5l@4@11@9@11@9@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个relid; 在这个例子中,rId6指向Emmbedded部分,rId5指向图像出现在文档表面(你需要自己创build)。

你可以编写代码来生成上面的你自己。 另外,商业docx企业版将为你做。