2017-04-19 34 views
6

我正在使用OpenXml SDK生成word 2013文件。我在服務器上運行(服務器解決方案的一部分),所以自動化不是一種選擇。如何在Word OpenXml零件中映射到可選數據時使節成爲可選項?

基本上我有一個從後端系統輸出的xml文件。這裏是一個非常簡化的例子:

<my:Data 
    xmlns:my="https://schemas.mycorp.com"> 
    <my:Customer> 
     <my:Details> 
      <my:Name>Customer Template</my:Name> 
     </my:Details> 
     <my:Orders> 
      <my:Count>2</my:Count> 
      <my:OrderList> 
       <my:Order> 
        <my:Id>1</my:Id> 
        <my:Date>19/04/2017 10:16:04</my:Date> 
       </my:Order> 
       <my:Order> 
        <my:Id>2</my:Id> 
        <my:Date>20/04/2017 10:16:04</my:Date> 
       </my:Order> 
      </my:OrderList> 
     </my:Orders> 
    </my:Customer> 
</my:Data> 

然後我用Word的XML映射窗格中映射該數據內容控制:

enter image description here

我簡單地複製Word文件,並寫入新的XML數據時生成新文件。

這是按預期工作。當我更新xml部分時,它反映了我後端的數據。

想到了,有一種情況是行不通的。如果客戶沒有訂單,則模板內容保存在文檔中。 xml數據爲:

<my:Data 
    xmlns:my="https://schemas.mycorp.com"> 
    <my:Customer> 
     <my:Details> 
      <my:Name>Some customer</my:Name> 
     </my:Details> 
     <my:Orders> 
      <my:Count>0</my:Count> 
      <my:OrderList> 
      </my:OrderList> 
     </my:Orders> 
    </my:Customer> 
</my:Data> 

(請參閱空的順序列表)。

在Word中,XML窗格反映了正確的數據(即沒有訂節點):

mapping with empty data

但正如你所看到的,模板內容還在這裏。

基本上,我想隱藏的命令列表時有沒有訂單(或至少一個空表)。

我該怎麼做?

PS:如果它可以幫助,我上傳的文字和XML文件,並注入數據小PowerShell腳本:repro.zip

+0

當然 - 請上傳文檔。 – Taterhead

+0

@Taterhead:voilà,已上傳 –

回答

1

感謝您分享文件,這樣我們可以更好地幫助你。

我很難解決您現有的Word內容控件,XML文件和將XML添加到Word文檔中的PowerShell腳本的問題。我發現你的問題似乎是Microsoft's VSTO example solution,但我無法讓它乾淨地工作。

我卻能夠編寫基於XML數據的Word文件簡單的C#控制檯應用程序。生成Word文件的OpenXML代碼是由Open XML Productivity Tool生成的代碼。然後,我添加了一些邏輯來讀取您的XML文件,並根據數據中有多少個訂單來動態生成第二個表格行。 I have uploaded the code for you to use if you are interested in this solution。注意:xml數據文件應該位於c:\ temp中,生成的文件也將位於c:\ temp中。

另一個好處該解決方案是,如果你是所有的客戶數據加入到一個XML文件,應用程序會在您的臨時目錄中單獨字的文件,像這樣:

customer_<name1>.docx

customer_<name2>.docx

customer_<name3>.docx

下面是從第一個XML文件 enter image description here

生成的文檔下面是與空行 enter image description here

希望這有助於從第二XML文件生成的文件。

+0

我真的很感謝你努力解決我的問題。但是,生成單詞ML實際上並不是一種選擇。我沒有描述整個解決方案來簡化問題,但在應用程序中,用戶可以編輯文檔模板(添加品牌,選擇列等)。 XML數據來自查詢系統,可導致任意數據集。單詞模板文件必須匹配XML數據。一切都是手動設置的,實例是一代文檔的實例(並且特定於我們的每個客戶,我們在哪裏運送我們的產品) –

相關問題