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.dllpublic 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));
}
}
}
}
}
}