Inserting a doc file inplace of place holder

247 Views Asked by At

I have a word document which contain many pages. One of those pages contain a placeholder instead of other content. so I want to replace that placeholder with another doc file without losing formatting. This doc file which is to be replaced may have many pages. How can I replace that placeholder with this doc file programmatically.. I searched many but could not find any option to insert a doc file replacing a placeholder.. Thank You In Advance.

Or how can we copy the contents of doc to be inserted and then replace the placeholder with copied content

I found a post here.The below code is from that post. With the library, you can do the following to replace text from a Word document, considering that documentByteArray is your document byte content taken from database:

using (MemoryStream mem = new MemoryStream())
{
 mem.Write(documentByteArray, 0, (int)documentByteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
    string docText = null;
    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
    {
        docText = sr.ReadToEnd();
    }

    Regex regexText = new Regex("Hello world!");
    docText = regexText.Replace(docText, "Hi Everyone!");

    using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
    {
        sw.Write(docText);
    }
}

}

if instead of "Hi Everyone" if we replace it with a binarydata,which is an array of bytes

byte[] binarydata = File.ReadAllBytes(filepaths);

how can we modify the program?

1

There are 1 best solutions below

0
Simon Price On

First of all you should get a Nuget package called Novacode.Docx, this is what I have found to be the best Document creator and editor in the last few years.

using Novacode.Docx;

void Main()
{
    var doc = DocX.Load(@"c:\temp\existingDoc.docx");
    var docToAdd = DocX.Load(@"c:\temp\docToAdd.docx"); 

    doc.InsertDocument(docToAdd, true);  //version 1.0.0.22    
    doc.InsertDocument(docToAdd);  //version 1.0.0.19  
}

this is the most simple and basic implementation of what it is that youre after but this works.

for anything else take a look at the documentation at

https://docx.codeplex.com/

or

http://cathalscorner.blogspot.co.uk/

this will be the best place to start. I would also recommend that if you do use this one that you use the version 1.0.0.19 as there are some formatting issues in 1.0.0.22