2014-12-04 2 views
0

В настоящее время я работаю над проектом, который требует автоматизации генерации документов. До сих пор мне удалось заменить заполнители полями, введенными пользователем на .docx, используя docx4j, а также добавив .png изображение на местозаполнитель. Теперь мне нужно прикрепить лист excel к конкретному заполнителю на .docx. Пожалуйста, предложите мне технику, чтобы сделать то же самое.есть excel to .docx using docx4j (или любой другой api)

Спасибо.

ответ

1

Вы должны добавить 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 отн идентификаторами; в этом примере rId6 указывает на часть Emmbedded, а rId5 указывает на изображение, которое должно появиться на поверхности документа (вам нужно создать это самостоятельно).

Вы можете написать код, чтобы создать это самостоятельно. В качестве альтернативы, коммерческая версия docx Enterprise сделает это за вас.

+0

Можете ли вы поделиться кодом для того же? Не могу найти что-нибудь об этом в сети. Я новичок в docx4j. –

+0

@PraveEnKamaTh, как указано выше: «Вы можете написать код для генерации вышесказанного самостоятельно. В качестве альтернативы * коммерческая версия docx Enterprise сделает это за вас. *« – Ben

+0

okay Я успешно применил Excel к docx ..... теперь проблема это необходимо принять как xls, так и xlsx форматы файлов. Код для присоединения .xls к .docx: OleObjectBinaryPart olePart = new OleObjectBinaryPart(); \t olePart.setBinaryData (oleFile); \t Отношения relOleObject = template.getMainDocumentPart(). AddTargetPart (olePart); Пожалуйста, предоставьте решение для подключения .xlsx к .docx –