c# - VSTO:自动更正添加条目未按预期工作
问题描述
似乎我们在 VSTO for Word 上发现了一个错误。
使用该AutoCorrect.Entries.Add
方法添加新条目时,这些条目只是添加到内存中,并且仅在 Word 关闭或处置时才提交到字典文件。
问题是,在 Word 的同一个实例中向多种语言添加一个或多个条目时,只有最后一种语言被提交到字典文件中。
这是代码示例:
using var wordApplication = new ApplicationClass();
foreach (var languageId in languageIds)
{
var wordDoc = wordApplication.Documents.Add();
wordDoc.Range().InsertAfter("Text");
wordDoc.Range().LanguageID = languageId;
foreach (var entry in addedEntries)
{
wordApplication.AutoCorrect.Entries.Add(entry.Item1, entry.Item2);
}
wordDoc.Close(false);
}
我们已经尝试过这个简化版本,但结果是一样的:
using var wordApplication = new ApplicationClass();
foreach (var languageId in languageIds)
{
wordApplication.ActiveDocument.Content.LanguageID = languageId
foreach (var entry in addedEntries)
{
wordApplication.AutoCorrect.Entries.Add(entry.Item1, entry.Item2);
}
}
在调试这两个代码示例时,我们可以看到其中word application.AutoCorrect.Entries
包含我们正在循环的每种语言的新条目,但是当 Word 在循环结束时关闭时,只有最后一种语言被提交到磁盘,其他字典没有被修改,并且条目丢失。
通过在机器上实际打开 Word,我们可以确认只有最后一种语言包含自动更正条目,而另一种则没有。
解决方案
那是因为您LanguageID
在代码中的同一个 Range 实例上设置了属性:
foreach (var languageId in languageIds)
{
wordApplication.ActiveDocument.Content.LanguageID = languageId
' ...
}
相反,请尝试设置LanguageID
不同的范围并按以下方式使用自定义字典:
ActiveDocument.Paragraphs(2).Range.LanguageID = wdFrench
Set myDictionary = CustomDictionaries.Add(Filename:="French.dic")
With myDictionary
.LanguageSpecific = True
.LanguageID = wdFrench
End With
推荐阅读
- python - 将带有应用样式的 Pandas DataFrame 导出为 pdf 或 png
- node.js - 无法在类中使用类外的变量
- node.js - 如何在surge.sh 上部署Express 应用程序
- c# - C# 切换标签系统税
- python - Python SciPy ODE 求解器不收敛
- java - 将 sourceforge 依赖添加到 Gradle 项目
- java - 让 JPanel 重叠
- c# - 进行 SharpSvn 合并时如何忽略空格更改?
- javascript - 如何访问指令内部的控制器内部功能?一切都返回未定义
- java - 带有外来字符的休眠 MySQL UTF8 查找问题