Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace content in template docx document and Open XML SDK 2.0 (Aug 09)?

Tags:

c#

docx

openxml

I have a "template" docx document which contains the desired layout, and wish to insert content using C#, but I cannot find a way to uniquely address specific sections of the document, such as paragraphs or tables. What is the best way to uniquely identify elements in the document? Thanks, Matt Sharpe.

like image 795
Matthew Sharpe Avatar asked Sep 01 '09 09:09

Matthew Sharpe


People also ask

How do I open Office Open XML in word processing?

#1) Open Windows Explorer and browse to the location where the XML file is located. We have browsed to the location of our XML file MySampleXML as seen below. #2) Now right-click over the file and select Open With to choose Notepad or Microsoft Office Word from the list of options available to open the XML file.


4 Answers

How is your template built? Does it use an underlying XML Schema loaded as part of the *.docx? Or are you using content controls off of the Developer ribbon, in which case each control is uniquely identified by a given tag name? Both of these approaches would make identifying certain sections of your document easier as you could control where tables or paragraphs would be.

Also, you may want to consider using the Open XML SDK 2.0 (uses .NET 3.5). It includes a handy Document Reflector tool that allows you to open up and inspect any Open XML document and shows how to generate the code for any element you click on.

Apart from that, to learn more about content controls you can check these posts:

  • Generating Microsoft Office Documents with the Open XML SDK
  • Creating Data-Bound Content Controls using the Open XML SDK and LINQ to XML
like image 103
Ahmad Mageed Avatar answered Oct 09 '22 05:10

Ahmad Mageed


Can you use document variables/fields? Just go to Insert->Quick Parts->Fields->Doc Variable, enter name of variable.

example: http://www.codeproject.com/KB/office/Fill_Mergefields.aspx

You could also just use placeholder text values like "##insert_first_name##" and then do a search and replace for those variables.

example: http://geekswithblogs.net/DanBedassa/archive/2009/01/16/dynamically-generating-word-2007-.docx-documents-using-.net.aspx

like image 40
Jim W Avatar answered Oct 09 '22 05:10

Jim W


I think you are looking for either bookmarks, or content controls (on the Ribbon's Developer tab, code example here)
I've used Named Ranges in Excel for the same purpose.

like image 44
foson Avatar answered Oct 09 '22 06:10

foson


There are several options to do this.

I have created a simple open-source library that will replace tags by values.

For example Hi {name} with data={name:"John"} will be replaced by Hi John.

Here it is : https://github.com/edi9999/docxtemplater

Demo: http://javascript-ninja.fr/docxgenjs/examples/demo.html

like image 38
edi9999 Avatar answered Oct 09 '22 05:10

edi9999