c# - c# Office Interop 循环遍历大型文档中的每个单词时速度很慢
问题描述
我有以下代码段,它遍历 Word 文档中的每个单词,找到粗体的行(句子)并将它们存储在列表中,MasterSentences
.
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
Document doc = new Document();
object path = fileDialog.FileName;
object missing = Type.Missing;
doc = word.Documents.Open(ref path, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
string sentence = "";
foreach (Range rng in doc.StoryRanges)
{
foreach (Range rngWord in rng.Words)
{
if ((rngWord.Text.Contains("\n") || rngWord.Text.Contains("\r")) && sentence != "")
{
MasterSentences.Add(sentence);
sentence = "";
}
else if (rngWord.Bold != 0 && rngWord.Text != " " && rngWord.Text != "\t")
{
sentence += rngWord.Text;
}
}
}
问题是,对于包含 23,742 个单词的 Word 文档,这需要大约 3-4 分钟才能完成。
有什么办法可以提高速度吗?有没有更有效的方法来实现这一点?
解决方案
谢谢你们的所有反馈。似乎使用 Range.Find.Execute 是正确的方法。这是我更新的大部分工作代码。现在只需要大约 20 秒,这是完美的。
Range rngFindBold = doc.Range();
rngFindBold.Find.Font.Bold = 1;
while (rngFindBold.Find.Execute(Format: true))
{
if (!string.IsNullOrWhiteSpace(rngFindBold.Text))
{
MasterSentences.Add(rngFindBold.Text);
}
}
推荐阅读
- .net - .NET WebBrowser 控件不接收 OAuth2 重定向 URL
- oracle-apex - APEX IG 未正确渲染网格
- here-api - 如何在 HERE api 的大规模矩阵中获取令牌请求的参数?
- c++ - 存储指向固定大小向量内的元素的指针
- python - 如何计算 pandas DataFrame 相关函数中使用的非 NA/null 值的数量?
- ruby-on-rails - Yard doc 和常量、实例和类方法的动态分配
- python - 比较 pandas 数据帧,从其他数据帧捕获数据
- c# - 从 C# 打印并使文本自动居中
- django - Django S3 项目中未显示 Font Awesome 4.7 图标
- ruby-on-rails - 为 Rails 添加 opentok-layout-js 到 webpack