2017-04-19 40 views
6

2013 word dosyalarını üretmek için OpenXml SDK kullanıyorum. Bir sunucuda çalışıyorum (sunucu çözümünün bir parçası), bu nedenle otomasyon bir seçenek değildir.Word OpenXml Bölümünde isteğe bağlı verilere eşlendiğinde isteğe bağlı bölüm nasıl oluşturulur?

Temel olarak bir arka uç sisteminden çıkarılan bir xml dosyası var. Ben sadece word dosyası çoğaltmak ve yeni XML verilerini zaman yazma

enter image description here

:

<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> 

Sonra içerik kontrolü için bu verileri eşleştirmek için Word'ün XML Haritalama bölmesini kullanın: Burada çok basitleştirilmiş bir örnek yeni dosyalar oluşturuluyor.

Bu, beklendiği gibi çalışıyor. Xml bölümünü güncellediğimde, arka tarafımdaki verileri yansıtır.

Düşünce, işe yaramayan bir durum var. Bir müşterisinin siparişi yoksa, şablon içeriği belgesinde saklanır. Xml verisi: (boş sipariş listesine bakınız):

<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'de, xml bölmesi (hayır Sipariş düğüm anlamına gelir) doğru verileri yansıtır:

mapping with empty data

Ama gördüğünüz gibi, şablon içeriği hâlâ burada.

Temelde, sipariş yokken (veya en azından boş bir tablo) sipariş listesini gizlemek istiyorum.

Bunu nasıl yapabilirim?

Not: size daha iyi yardımcı olabilir böylece dosya paylaşımı için repro.zip

+0

Elbette - belgeleri yükleyin, lütfen. – Taterhead

+0

@Taterhead: voilà, o yüklendi –

cevap

1

Teşekkür: o yardımcı olabilir, ben kelimeyi ve xml dosyaları ve veri enjekte küçük PowerShell komut dosyası yüklediği.

Sorununuzu, varolan Word İçerik Denetimleri, XML dosyaları ve XML belgesini Word belgesine ekleyen PowerShell betiğiyle çözmeye çalışırken zor bir zaman geçirdim. Sorununuza Microsoft's VSTO example solution gibi görünen şeyleri buldum, ancak bunu düzgün bir şekilde çalıştıramadım.

Ancak XML verilerinizi temel alan bir Word dosyası oluşturan basit bir C# konsol uygulaması yazabiliyordum. Word dosyasını oluşturmak için OpenXML kodu Açık XML Üretkenlik Aracı'ndan kod oluşturuldu. Daha sonra, XML dosyanızın okunması için bazı mantık ekledim ve verilerde kaç tane sipariş olduğuna bağlı olarak ikinci tablo satırlarını dinamik olarak oluşturdum. I have uploaded the code for you to use if you are interested in this solution. Not: xml veri dosyası c: \ temp olmalı ve oluşturulan word dosyaları c: \ temp de olacaktır.bir XML dosyası içine müşteri verilerinin tümünü eklemek vardı sen, uygulama şöyle temp dizininde ayrı sözcük dosyaları oluşturmak eğer

bu çözümün bir başka avantaj ise:

customer_<name1>.docx

customer_<name2>.docx

customer_<name3>.docx

vb

İşte burada boş satıra enter image description here

bu yardımcı olur Umut ile ikinci xml dosyadan oluşturulan belgedir ilk xml dosyasında enter image description here

oluşturulan belgedir.

+0

Sorunumu çözmek için çaba sarfetmek için gerçekten çok minnettarım. Bununla birlikte, ML kelimesinin oluşturulması aslında bir seçenek değildir. Soruyu basitleştirmek için tüm çözümü açıklamamıştım, ancak uygulamada kullanıcılar belge şablonunu düzenleyebilir (marka ekleyerek, sütun seçerek, vb.). XML verileri, rasgele bir veri kümesiyle sonuçlanabilecek bir sorgu sisteminden gelir. Sözcük şablonu dosyası daha sonra XML verisi ile eşleşmelidir. Her şey elle kurulum, örneğin bir belge nesnesinin örneği (ve ürünümüzü gönderdiğimiz her müşterimize özel) –