OpenXML file manipulation

OpenXML file manipulation
Top  Previous  Next
http://www.rootsilver.com/2008/11/office-2007-open-xml-global-string-replace

Code to replace strings with desired content.
Very handy for template based editing.
There is already existing project in RAC/OpenXML

using System;
using System.Xml;
using System.IO;
using System.Text.RegularExpressions;
using System.IO.Packaging; //C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\windowsbase.dll

public class ReplacementUtility {
public static void Main {
ReplacementUtility utility = new ReplacementUtility();
//Word 2007
string templateFile = “c:\\template.docx”;
string newFile = “c:\\widgets.docx”;

File.Copy(templateFile, newFile);
utility.UpdateOpenXmlDocument(newFile, “Acme Inc”, “Wally’s Widgets”);

//Excel 2007
templateFile = “c:\\template.pptx”;
newFile = “c:\\widgets.pptx”;

File.Copy(templateFile, newFile);
utility.UpdateOpenXmlDocument(newFile, “Acme Inc”, “Wally’s Widgets”);
}

public void UpdateOpenXmlDocument(string fileName, string searchRegexp, string replacement) {
Regex regex = new Regex(searchRegexp, RegexOptions.Multiline|RegexOptions.IgnoreCase);
using (Package package = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite)) {
foreach (PackagePart part in package.GetParts()) {
if (part.Uri.ToString().IndexOf(“.xml”) != -1
||
part.Uri.ToString().IndexOf(“.rels”) != -1) {

XmlDocument document = new XmlDocument();
document.Load(part.GetStream());

if (regex.IsMatch(document.InnerXml)) {
document.InnerXml = regex.Replace(document.InnerXml, replacement);
document.Save(part.GetStream(FileMode.Create, FileAccess.Write));
}
}
}
}
}
}

Leave a comment