简体   繁体   English

C#使用OpenXML附加到DOCX文件

[英]C# Append to DOCX file using OpenXML

I am using OpemXML in C# in order to build my DOCX file. 我在C#中使用OpemXML来构建DOCX文件。 My code looks like this: 我的代码如下所示:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(wordFileNamePath, true))
{
    for (int i = 0; i < length; i++)
    {
        using (StreamWriter sw = new StreamWriter(i == 0 ? wordDoc.MainDocumentPart.GetStream(FileMode.Create) : wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write)))
        {
            sw.Write(tempDocText.ToString());
        }
        if (i < length - 1)
        {
            tempDocText = CreateNewStringBuilder();
            InsertPageBreak(wordDoc);
        }
    }
    wordDoc.MainDocumentPart.Document.Save();
}

On the second loop, when it comes to wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write) I'm getting an ArgumentException saying "FileMode value is not supported." 在第二个循环中,当涉及到wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write)我收到一个ArgumentException,说“不支持FileMode值”。

I think there is a problem in your code, you are using tempDocText.ToString() before initializing it in the for loop as shown below 我认为您的代码中有问题,您正在使用tempDocText.ToString(),然后在for循环中对其进行初始化,如下所示

using (StreamWriter sw = new StreamWriter(i == 0 ? wordDoc.MainDocumentPart.GetStream(FileMode.Create) : wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write)))
{
    sw.Write(tempDocText.ToString()); //<-Used before Initialization
}

and Initializing it as in the later code block 并按照后面的代码块中的方法进行初始化

if (i < length - 1)
{
    tempDocText = CreateNewStringBuilder(); //<-Initializing it here.
    InsertPageBreak(wordDoc);
}

Unless you provide more information about tempDocText , its dificult to help. 除非您提供有关tempDocText的更多信息, 否则它会有所帮助。

Anyways, if you just want to add text to a docx file then the following code may help. 无论如何,如果您只想向docx文件中添加文本,则以下代码可能会有所帮助。 I found it here . 我在这里找到的。

public static void OpenAndAddTextToWordDocument(string filepath, string txt)
{   
    // Open a WordprocessingDocument for editing using the filepath.
    WordprocessingDocument wordprocessingDocument = 
        WordprocessingDocument.Open(filepath, true);

    // Assign a reference to the existing document body.
    Body body = wordprocessingDocument.MainDocumentPart.Document.Body;

    // Add new text.
    Paragraph para = body.AppendChild(new Paragraph());
    Run run = para.AppendChild(new Run());
    run.AppendChild(new Text(txt));

    // Close the handle explicitly.
    wordprocessingDocument.Close();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM