2017-04-19 23 views
6

Tôi đang sử dụng SDK OpenXml để tạo tệp từ 2013. Tôi đang chạy trên một máy chủ (một phần của một giải pháp máy chủ), do đó, tự động hóa không phải là một lựa chọn.Làm cách nào để tạo một phần tùy chọn khi ánh xạ tới dữ liệu tùy chọn trong phần Word OpenXml?

Về cơ bản tôi có tệp xml được xuất từ ​​hệ thống phụ trợ. Dưới đây là một ví dụ rất đơn giản:

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

Sau đó, tôi sử dụng khung Xml Mapping của Word để ánh xạ dữ liệu này để kiểm soát nội dung:

enter image description here

tôi chỉ đơn giản lặp lại trong các file word, và ghi dữ liệu Xml mới khi tạo tệp mới.

Điều này hoạt động như mong đợi. Khi tôi cập nhật phần xml, nó phản ánh dữ liệu từ chương trình phụ trợ của tôi.

Suy nghĩ, có trường hợp không hoạt động. Nếu một khách hàng không có đơn đặt hàng, nội dung mẫu được lưu trong tài liệu. Dữ liệu xml là:

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

(xem danh sách đơn hàng trống).

Trong Word, khung xml phản ánh các dữ liệu chính xác (nghĩa là không có nút theo thứ tự):

mapping with empty data

Nhưng như bạn có thể thấy, nội dung mẫu vẫn còn ở đây.

Về cơ bản, tôi muốn ẩn danh sách đơn đặt hàng khi không có đơn đặt hàng (hoặc ít nhất là một bảng trống).

Tôi có thể làm như thế nào?

PS: Nếu nó có thể giúp đỡ, Tôi đã tải lên từ và các tập tin xml, và một kịch bản PowerShell nhỏ mà tiêm dữ liệu: repro.zip

+0

Chắc chắn - hãy tải tài liệu lên. – Taterhead

+0

@Taterhead: voilà, nó đã được tải lên –

Trả lời

1

Cảm ơn để chia sẻ tập tin của bạn vì vậy chúng tôi có thể giúp bạn tốt hơn.

Tôi đã có một thời gian khó khăn để giải quyết vấn đề của bạn với các Điều khiển nội dung Word hiện tại, tệp XML và tập lệnh PowerShell đã thêm XML vào tài liệu Word. Tôi tìm thấy những gì dường như là Microsoft's VSTO example solution cho vấn đề của bạn, nhưng tôi không thể làm điều này để làm việc sạch.

Tuy nhiên, tôi có thể viết một ứng dụng giao diện điều khiển C# đơn giản để tạo tệp Word dựa trên dữ liệu XML của bạn. Mã OpenXML để tạo tệp Word được tạo mã từ Công cụ năng suất XML mở. Sau đó, tôi đã thêm một số logic để đọc tệp XML của bạn và tạo các hàng trong bảng thứ hai động tùy thuộc vào số lượng đơn đặt hàng có trong dữ liệu. I have uploaded the code for you to use if you are interested in this solution. Lưu ý: Tệp dữ liệu xml phải ở trong c: \ temp và các tệp từ được tạo sẽ ở trong c: \ temp.

Một tiền thưởng bổ sung vào giải pháp này là nếu bạn đã thêm tất cả các dữ liệu khách hàng vào một tập tin XML, ứng dụng sẽ tạo ra các file từ riêng trong thư mục temp của bạn như sau:

customer_<name1>.docx

customer_<name2>.docx

customer_<name3>.docx

, vv

Dưới đây là tài liệu được tạo ra từ file xml đầu tiên enter image description here

Dưới đây là tài liệu được tạo ra từ file xml thứ hai với hàng rỗng enter image description here

Hope this helps.

+0

Tôi thực sự đánh giá cao nỗ lực của bạn để cố gắng giải quyết vấn đề của tôi. Tuy nhiên, việc tạo từ ML không thực sự là một lựa chọn. Tôi đã không mô tả toàn bộ giải pháp để đơn giản hóa câu hỏi, nhưng trong ứng dụng, người dùng có thể chỉnh sửa mẫu tài liệu (thêm thương hiệu, chọn cột, v.v.). Dữ liệu XML cames từ một hệ thống truy vấn có thể dẫn đến một tập hợp dữ liệu tùy ý. Tệp mẫu từ sau đó phải khớp với dữ liệu XML. Mọi thứ đều được thiết lập theo cách thủ công, ví dụ mỗi trường hợp của một thế hệ tài liệu (và cụ thể cho từng khách hàng của chúng tôi nơi chúng tôi giao sản phẩm của mình) –

Các vấn đề liên quan