C#word文件无法打开

时间:2017-05-17 13:26:20

标签: c# .net

我正在尝试从word文件中读取文本,然后替换其中的一些文本,然后在c#中以相同的格式将其保存为其他名称。但是,当我打开生成的文档时,它不是用ms字打开,而是用notepad ++打开它。我想要单词file.Whats代码中的问题? 提前致谢。

string path = Server.MapPath("~/CustomerDocument/SampleNDA4.docx");


        TextExtractor extractor = new TextExtractor(path);
        string text = extractor.ExtractText();

        //System.IO.File.Create(path).Close();
        text = text.Replace("<var_Date>", DateTime.Now.ToString("MMM dd,yyyy"));

        //System.IO.File.Create(Server.MapPath("~/CustomerDocument/GeneratedNDA3.docx"));

        System.IO.File.WriteAllText(Server.MapPath("~/CustomerDocument/GeneratedNDA3.docx"), text); 

2 个答案:

答案 0 :(得分:0)

您可以使用{{1}}库将文档另存为Word文件。请检查以下代码是否适合您:

{{1}}

注意:MS Word应安装在执行此代码的服务器上。

答案 1 :(得分:0)

根据您的要求考虑以下选项。所有选项都有一个nuget包安装在项目中。

  1. 使用OpenXML

    <WebLayout>
  2. 使用Office Interop,但需要在服务器上安装MSOffice。

    using (WordprocessingDocument myDocument = WordprocessingDocument.Open(@"C:\Git\source.docx", true))
    {
       foreach (Paragraph objParagraph in myDocument.MainDocumentPart.Document.Body.Elements<Paragraph>())
       {
           string innerText = objParagraph.InnerText;
    
           string modifiedString = innerText.Replace("<var_Date>", DateTime.Now.ToString("MMM dd,yyyy"));
    
           if (modifiedString != innerText)
           {
               Run newRun = new Run();
               newRun.AppendChild(new Text(modifiedString));
               objParagraph.RemoveAllChildren<Run>();
               objParagraph.AppendChild(newRun);
            }
        }
    }
    
    • 将要求在服务器上安装MSOffice
    • 它有点慢,所以不适合高使用率场景。
  3. 使用Aspose.Words

       Application app = new Application();
       Document doc = app.Documents.Open(@"C:\Git\source.docx");
    
       foreach (Paragraph objParagraph in doc.Paragraphs)
       {
           objParagraph.Range.Text = objParagraph.Range.Text.Trim().Replace("<var_Date>", DateTime.Now.ToString("MMM dd,yyyy")) + "\r\n";
       }
    
       doc.SaveAs2(@"C:\Git\finalFile.docx");
       doc.Close();
       app.Quit();
    
    • Aspose需要付费许可证,但在服务器上使用速度相对较快。