我知道上面有很多帖子,但没有解决我的问题的方法:我使用OPENxml创建Word文档,并且在创建过程中向该文档中添加了一些准备好的文件。 我想在文档准备好后更改要添加的文件中的一些文本。 所以这就是我尝试的:首先创建文档:

fileName = HttpContext.Current.Server.MapPath("~/reports/"+fileName+".docx");
using (var doc = WordprocessingDocument.Create(
    fileName, WordprocessingDocumentType.Document))
{
    ///add files and content inside the document
    addContentFile("template1part1", HttpContext.Current.Server.MapPath("~/templates/template1part1.docx"), mainPart);
}

这就是我添加文件的方式:

private static void addContentFile(string id,string path, MainDocumentPart mainPart){
    string altChunkId = id;
    AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
        AlternativeFormatImportPartType.WordprocessingML, altChunkId);
    using (FileStream fileStream = File.Open(path, FileMode.Open))
    {
        chunk.FeedData(fileStream);
        fileStream.Close();
    }
    AltChunk altChunk = new AltChunk();
    altChunk.Id = altChunkId;
    mainPart.Document.Body.Append(altChunk);
    mainPart.Document.Save();
}

这就是我创建文件后尝试替换文本的方式(使用完WordprocessingDocument之后)

第一次尝试:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
    string docText = null;
    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        docText = sr.ReadToEnd();

    docText = new Regex(findText, RegexOptions.IgnoreCase).Replace(docText, replaceText);

    using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
        sw.Write(docText);
}

第二次尝试:

using ( WordprocessingDocument doc =
    WordprocessingDocument.Open(@"yourpath\testdocument.docx", true))
    {
        var body = doc.MainDocumentPart.Document.Body;
        var paras = body.Elements<Paragraph>();

        foreach (var para in paras)
        {
            foreach (var run in para.Elements<Run>())
            {
                foreach (var text in run.Elements<Text>())
                {
                    if (text.Text.Contains("text-to-replace"))
                    {
                        text.Text = text.Text.Replace("text-to-replace", "replaced-text");
                    }
                }
            }
        }
    }
}

他们都没有工作,我尝试了更多。 它适用于我手动添加到文档中的文本,但是现在适用于我从就绪文件中添加的文本。 有办法吗?

===============>>#1 票数:0

添加文件的方式是使用altchunck 但是,您试图替换事物,就像在修改结果文档的openxml

当您将文档合并为altchuncks时,基本上是将它们作为嵌入式外部文件添加到原始文档中,而不是作为openxml标记添加。 这意味着您不能将其他附加文档视为openxml文档。

如果你想达到你想什么,你要合并的文件在我的答案在这里解释- https://stackoverflow.com/a/18352219/860243这使得生成的文档正确的openxml文件。 它允许您以后根据需要对其进行修改。

  ask by Jordan translate from so

未解决问题?本站智能推荐: