2013-11-15 67 views
0

我正在開發一項功能,用戶可以通過它使用佔位符上傳docx文檔。這些佔位符稍後將被來自數據庫的數據替換。爲了確保用戶只使用預定義的佔位符,他必須選擇一個Ms Access文件(.mdb),其定義的字段(mergefield)是有效的佔位符。我成功地用我的數據替換mergefields。但是,我無法擺脫與Access文件定義的關係。我知道,下面必須從我的docx文檔的XML刪除:Docx4J:如何刪除MailMerge的關係?

<pkg:part pkg:name="/word/_rels/settings.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml"><pkg:xmlData> 
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/recipientData" Target="recipientData.xml"/> 
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/mailMergeSource" Target="file:///D:\Downloads\Lager.mdb" TargetMode="External"/></Relationships></pkg:xmlData></pkg:part> 


<w:mailMerge><w:mainDocumentType w:val="formLetters"/><w:linkToQuery/><w:dataType w:val="native"/><w:connectString w:val="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=P:\SINA\Projektteam\Referat413\Basisklassen fuer Schablonen\Lager.mdb;Mode=Read;Extended Properties=&quot;&quot;;Jet OLEDB:System database=&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;;Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=&quot;&quot;;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"/><w:query w:val="SELECT * FROM `Office Address List` "/><w:odso><w:udl w:val="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\Benutzer-Profile\boehmv\Downloads\Lager.mdb;Mode=Read;Extended Properties=&quot;&quot;;Jet OLEDB:System database=&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;;Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=&quot;&quot;;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False"/> 
<w:table w:val="Office Address List"/> 
<w:src r:id="rId1"/><w:colDelim w:val="9"/><w:type w:val="addressBook"/><w:fHdr/><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:recipientData r:id="rId2"/></w:odso> 
</w:mailMerge> 

不知道如何與docx4j解決這個問題? 我發現在W:郵件合併標籤使用以下方法:

String xml = XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getDocumentSettingsPart().getJaxbElement(), true, true); 

不幸的是,我不能夠改變DocumentSettingsPart。

+0

爲什麼不能更改DocumentSettingsPart?您的問題是「如何更改DocumentSettingsPart」? – JasonPlutext

+0

我沒有找到適用於DocumentSettingsPart的任何適合的設置方法。您是否知道如何修改現有DocumentSettingsPart的方法? – user1335772

回答

0

我終於找到了一種適合我的方法。以下方法刪除郵件合併設置:

private void removeMailmergeRelationship(WordprocessingMLPackage wordMLPackage) { 
    DocumentSettingsPart dsp = wordMLPackage.getMainDocumentPart().getDocumentSettingsPart(); 
    CTSettings settings = dsp.getJaxbElement(); 
    settings.setMailMerge(null); 
} 
+0

這正是「正確」的方法:-) – JasonPlutext