1

在努力让我的 word 文档在我的本地机器上正常运行后,我了解到我的服务器没有 Microsoft Office。我正在尝试打开、修改、保存和显示文档。我发现 OPEN XML SDK 2.0 是要走的路。我今天早上刚下载了这个程序,我不知道如何将它集成到我的代码中。我该怎么做呢?

我瞎了眼,这就是我想做的。此代码适用于办公室

object pathToUse = Server.MapPath("~/Document/TemplateX.docx");
object pathToSave = Server.MapPath("~/Document/FinishedX.docx");

//open file
tempDoc = wordApp.Documents.Open(ref pathToUse, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref isVisible, ref missing, ref missing,
   ref missing, ref missing);

//Make edits - I had this for my word document
this.FindAndReplace(Application wordApp, "<date>", DateTime.Today.ToShortDateString());

//save
tempDoc.SaveAs(ref pathToSave, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref isVisible, ref missing, ref missing,
   ref missing, ref missing);

//return file in my Controller
return File(pathToSave.ToString(), "docx");

我只是添加了代码来显示我有需要的东西,但是缺少 Microsoft 曲线球伤害了我的心理。提前致谢。帮助!

4

1 回答 1

2

OpenXml SDK 将允许您这样做,但您可能需要考虑在 Word 中编辑模板时可能出现的特殊情况,例如将相同样式的文本拆分为多个元素。

首先去下载VS2010 的 Open XML 插件。它会让你看到你正在使用的结构 - 在 VS2010 中拖动一个 .docx 文件,在包中查找 document.xml,按 Ctrl-KD 格式化文档以提高可读性。

将 SDK 附带的 DLL 添加到您的项目中。

从流中打开 Word 文档,确保在此之前复制模板文件:

using (var document = WordprocessingDocument.Open(stream, true))
                {
...
}// document auto-saves when done

替换标签内的文本:

List<Text> textElements = document.MainDocumentPart.Document.Body.Descendants<Text>()
    .Where(t=>t.InnerText == "<date>").ToList();
textElements.ForEach(te=>te.InnerText = DateTime.Today.ToShortDateString());

此示例将帮助您入门,但希望看到 Word 以您未曾预料到的奇怪方式构建其 XML,尤其是在您的文档很复杂的情况下。

于 2013-01-29T20:31:31.223 回答