C#word文档

时间:2017-05-17 15:46:25

标签: c# .net openxml

我想在不打开的情况下阅读word文档。然后替换其中的一些文本,然后使用C#以相同的格式将其保存为其他名称。但是文档不会随更改一起保存,而是以与原始文档相同的方式保存。任何帮助将不胜感激。提前谢谢。

    string path = Server.MapPath("~/CustomerDocument/SampleNDA5.docx");
    WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(path, false);
    {
        var body = wordprocessingDocument.MainDocumentPart.Document.Body;

        foreach (var text in body.Descendants<Text>())
        {
            if (text.Text.Contains("<var_Date>")) 
            {
                text.Text = text.Text.Replace("<var_Date>", DateTime.Now.ToString("MMM dd,yyyy"));
            }
        }
        wordprocessingDocument.SaveAs(Server.MapPath("~/CustomerDocument/SampleNDA10.docx"));
        wordprocessingDocument.Close();
    }

2 个答案:

答案 0 :(得分:1)

我认为这应该有所帮助。它解释了如何将编辑内容放回集合​​中。 https://www.codeproject.com/Articles/87616/List-T-ForEach-or-Foreach-It-Doesn-t-Matter-Or-Doe

答案 1 :(得分:1)

因此,如果您的单词模板在每次基本上都是相同的

  • 复制模板
  • 在模板上工作
  • 以所需格式保存
  • 删除模板副本

您要在word文档中替换的每个部分都必须为该位置插入书签(在区域中输入文本的最简单方法)。

我总是创建一个功能来完成这个,我最终传入路径 - 以及所有文本来替换我的文档内书签。函数调用有时会变长,但它对我有用。

Application app = new Application();
Document doc = app.Documents.Open("sDocumentCopyPath.docx");

if (doc.Bookmarks.Exists("bookmark_1"))
{
    object oBookMark = "bookmark_1";
    doc.Bookmarks.get_Item(ref oBookMark).Range.Text =
            "My Text To Replace bookmark_1";
}
if (doc.Bookmarks.Exists("bookmark_2"))
{
    object oBookMark = "bookmark_2";
    doc.Bookmarks.get_Item(ref oBookMark).Range.Text =
            "My Text To Replace bookmark_2";
}

doc.ExportAsFixedFormat("myNewPdf.pdf", WdExportFormat.wdExportFormatPDF);

((_Document)doc).Close();
((_Application)app).Quit();

除非您想将所有值传递给函数,否则此代码应该可以启动并运行。

如果您需要更多解释,我也可以提供帮助:)我的示例将其保存为.pdf,但您可以选择任何您喜欢的格式。