您的位置:首页 > 编程语言

通过代码将Word 2007 template (dotx)文档转换Word 2007 (docx)文档

2008-06-27 23:37 696 查看
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: 


 

System.IO.Packaging 相关文章:

http://msdn.microsoft.com/msdnmag/issues/06/11/BasicInstincts/default.aspx

http://blogs.msdn.com/erikaehrli/archive/2006/08/16/word2007DataDocumentGenerationPart2.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: