【发布时间】:2016-01-04 19:04:23
【问题描述】:
我有一个可观察的集合,其中包含一个具有 2 个字符串属性的类:Word 和 Translation。我想创建一个word文件格式:
word = 翻译 word = 翻译
word = 翻译 word = 翻译...
word文档需要2列(页面布局),Word应该是粗体。
我首先尝试了 Microsoft.Office.Interop.Word。
PageSetup.TextColumns.SetCount(2) 设置页面布局。至于文本本身,我使用了一个 foreach 循环,并且在每次迭代中我都这样做了:
paragraph.Range.Text = Word + " = " + Translation;
object boldStart = paragraph.Range.Start;
object boldEnd = paragraph.Range.Start + Word.Length;
Word.Range boldPart = document.Range(boldStart, boldEnd);
boldPart.Bold = 1;
paragraph.Range.InsertParagraphAfter();
这正是我想要的,但如果集合中有 1000 个项目,则大约需要 10 秒,如果数字是 10k+ 则更多。然后我使用了 StringBuilder 并设置了document.Content.Text = sb.ToString();,这需要不到一秒的时间,但我不能这样设置单词为粗体。
然后我切换到使用 Open XML SDK 2.5,但即使在阅读了 msdn 文档之后,我仍然不知道如何将部分文本设置为粗体,甚至不知道是否可以设置 PageLayout Columns数数。我唯一能做的就是让它看起来与 Interop.Word 相同,但只有 1 列和
我应该为此使用 Interop.Word 还是 Open XML(或者可能结合使用)?有人可以告诉我如何正确地写这个,所以如果集合相对较大,它不会永远花费?任何帮助表示赞赏。 :)
【问题讨论】:
-
尽可能避免互操作(在你的情况下是可能的)
-
您可以下载 Open XML SDK 生产力工具here。您可以使用它来查看制作 word 文档时生成的 xml 代码,它还显示了您需要生成它的 c# 代码
-
@AlexanderDerck 我下载了生产力工具,但还没有安装。看到您的评论后,我安装了它,制作了一个测试 word 文档,在工具中花费了大约 1-2 分钟,找到了我需要知道的内容并在 VS 中编写了代码......我之前花了 5 个多小时阅读/学习互操作和开放 XML SDK 并尝试对其进行编码。当我下载它时,我对这个工具的概念有错误的想法。感谢您提供简单但很好的建议:D
-
@VincentProxy 是的,open xml sdk 的文档很糟糕,但至少那个工具很棒:)
标签: c# ms-word openxml observablecollection