我知道它上面有很多帖子,但是我的问题没有任何效果: 我使用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");
}
}
}
}
}
}
他们都没有工作,我尝试了更多。 它适用于我手动添加到文档中的文本,但它现在正在处理我从ready文件中添加的文本。 还有办法吗?
答案 0 :(得分:0)
添加文件的方式是使用altchunck
s。但是,您正在尝试替换内容,就好像您要修改生成的文档openxml
一样。
将文档合并为altchuncks
时,基本上将它们作为嵌入式外部文件添加到原始文档中,而不是openxml
标记。这意味着您无法将其他附加文档视为openxml
文档。
如果您想要实现您正在尝试的目标,您必须按照我在此处的答案中所述合并文档 - https://stackoverflow.com/a/18352219/860243,这会使得到的文档成为正确的openxml
文档。这允许您随后根据需要进行修改。