【问题标题】:Build Word Document from template从模板构建 Word 文档
【发布时间】:2012-08-23 17:06:20
【问题描述】:

我有一个基于提供给我的模板即时创建 Word 文档的请求。我做了一些研究,一切似乎都指向 OpenXML。我已经对此进行了调查,但是创建的 cs 文件超过 15k 行并且正在破坏我的 VS 2010(导致它在我每次进行更改时都没有响应)。

我一直在看这个关于 Open XML 的教程系列 http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/10/13/getting-started-with-open-xml-development.aspx

我过去用文本文件和正则表达式做过一些事情,但是由于 Word 会加密所有内容,所以这不起作用。对于从模板创建 word 文档,是否还有其他相当轻量级的选项。

【问题讨论】:

    标签: c# ms-word openxml


    【解决方案1】:

    //你好,很简单。

                //First, you should copy your Template file into another location.
                string SourcePath = "C:\\MyTemplate.dotx";
                string DestPath = "C:\\MyDocument.docx";
                System.IO.File.Copy(SourcePath, DestPath);
    
                //After copying the file, you can open a WordprocessingDocument using your Destination Path.
    
                WordprocessingDocument Mydoc = WordprocessingDocument.Open(DestPath, true);
    
                //After openning your document, you can change type of your document after adding additional parts into your document.
                mydoc.ChangeDocumentType(WordprocessingDocumentType.Document);
    
                //If you wish, you can edit your document 
                AttachedTemplate attachedTemplate1 = new AttachedTemplate() { Id = "MyRelationID" };
    
                MainDocumentPart mainPart = mydoc.MainDocumentPart;
                MySettingsPart = mainPart.DocumentSettingsPart;
    
                MySettingsPart.Settings.Append(attachedTemplate1);
    
                MySettingsPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate", new Uri(CopyPath, UriKind.Absolute), "MyRelationID");
    
    
    
                //Finally you can save your document.
                mainPart.Document.Save();
    

    【讨论】:

      【解决方案2】:

      我目前正在从事这些方面的工作,我一直在使用 Open XML SDKOpenXmlPowerTools 所采取的方法是将实际模板文件打开并将文本放入模板文件。我一直在使用内容控件作为位置标记。

      用于打开文档的 SDK 工具在比较文档并查看其构造方式方面非常宝贵。但是,从该工具生成的代码我一直在大量重构并删除根本不使用的部分。

      我不能谈论 doc 文件,但是对于 docx 文件,它们没有加密,它们只是包含 xml 文件的 zip 文件

      Eric White's blog有大量的例子和代码示例,非常有用

      【讨论】:

      • 你需要取出哪些零件?这个工具创建的代码量是疯狂的。
      • 所以我做的主要部分是将模板文件上传到系统并保存为字节数组。模板文件具有我用作位置标记的内容控件。当我处理它时,我获取模板字节数组,使用 OpenXML SDK 打开它,然后找到所有内容控件并根据 Id 填充它们,然后根据数据库中保存的值填充它们。我大量利用模板并主要使用 SDK 来替换文本。 SDK工具我主要是看如何在代码中构建,然后在代码中写的更干净。
      猜你喜欢
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多