I have created a docx file from a word template, now I am accessing the copied docx file and want to replace certain text with some other data.
I am unable to get the hint as to how to access the text from the doument main part?
Any help would be appreciable.
Below is my code till now.
private void CreateSampleWordDocument() { //string sourceFile = Path.Combine("D:\\GeneralLetter.dot"); //string destinationFile = Path.Combine("D:\\New.doc"); string sourceFile = Path.Combine("D:\\GeneralWelcomeLetter.docx"); string destinationFile = Path.Combine("D:\\New.docx"); try { // Create a copy of the template file and open the copy File.Copy(sourceFile, destinationFile, true); using (WordprocessingDocument document = WordprocessingDocument.Open(destinationFile, true)) { // Change the document type to Document document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document); //Get the Main Part of the document MainDocumentPart mainPart = document.MainDocumentPart; mainPart.Document.Save(); } } catch { } }
Now how to find certain text and replace the same? I am unable to get via Link, so some code hint would be appreciable.
XML files can be opened in a browser like IE or Chrome, with any text editor like Notepad or MS-Word. Even Excel can be used to open XML files.
Edit Office Open XML markup in a text editor like Notepad. If you open it in Visual Studio, use Edit >Advanced > Format Document (Ctrl+K, Ctrl+D) to format the package for easier editing.
To extract the contents of the file, right-click on the file and select “Extract All” from the popup menu. On the “Select a Destination and Extract Files” dialog box, the path where the content of the . zip file will be extracted displays in the “Files will be extracted to this folder” edit box.
Just to give you the idea of how to do it, please try:
using ( WordprocessingDocument doc = WordprocessingDocument.Open(@"yourpath\testdocument.docx", true)) { var body = doc.MainDocumentPart.Document.Body; var paras = body.Elements<Paragraph>(); foreach (var para in paras) { foreach (var run in para.Elements<Run>()) { foreach (var text in run.Elements<Text>()) { if (text.Text.Contains("text-to-replace")) { text.Text = text.Text.Replace("text-to-replace", "replaced-text"); } } } } } }
Please note the text is case sensitive. The text formatting won't be changed after the replace. Hope this helps you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With