通过代码将Word 2007 template (dotx)文档转换Word 2007 (docx)文档
https://www.xuebuyuan.com/101905.html
在Code Project中闲逛时,让我发现了这样一篇文章Create simple Word 2007 documents without needing Word 2007 installed,里面就有提到Office 2007的文档都可以用压缩工具来查看里面的文件,也就是Office 2007的文档是用打包工具把XMLs打包在一起的。因此可以通过.net framework 3.0的System.IO.Packaging来打开docx之类的文档,处理好相关的XMLs,再打包。下面就是这样来处理一个dotx文档,转换成docx文档。
以下代码来自 http://openxmldeveloper.org/forums/post/2816.aspx
1: const string documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; 2: const string wordDOCXContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"; 3: string docName = @"c:\test9\1nameis.dotx"; 4: Package wdPackage = Package.Open(docName, FileMode.Open, FileAccess.ReadWrite); 5: PackagePart documentPart = null; 6: Uri documentUri = null; 7: 8: // Get the main document part (document.xml). 9: foreach (System.IO.Packaging.PackageRelationship relationship in wdPackage.GetRelationshipsByType(documentRelationshipType)) 10: { 11: documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri); 12: documentPart = wdPackage.GetPart(documentUri); 13: // There is only one document. 14: break; 15: } 16: 17: XmlDocument xdoc = new XmlDocument(); 18: xdoc.Load(documentPart.GetStream()); 19: 20: // Delete the document part and its relationship part. 21: wdPackage.DeletePart(documentPart.Uri); 22: 23: // Create new document and relationship parts using the correct content types. 24: 25: documentPart = wdPackage.CreatePart(documentUri, wordDOCXContentType); 26: xdoc.Save(documentPart.GetStream(FileMode.Create, FileAccess.Write)); 27: wdPackage.Close(); 28: 29: string newFileName = Path.GetDirectoryName(docName) + @"\" + Path.GetFileNameWithoutExtension(docName) + ".docx"; 30: // If the new file exists, delete it. You might 31: // want to make this code less destructive. 32: if (File.Exists(newFileName)) 33: { 34: File.Delete(newFileName); 35: } 36: File.Move(docName, newFileName); 37: