Gor*_*kic 12 c# ms-word office-interop
我有一个简单的测试程序,使用Microsoft Word Interop从Thesaurus字典中获取单词含义:
using System;
using Word = Microsoft.Office.Interop.Word;
class Program
{
static void Main(string[] args)
{
string word = "elite"; // = "common";
var app = new Word.Application();
var synInfo = app.SynonymInfo[word, Word.WdLanguageID.wdEnglishUS];
if (synInfo.Found && synInfo.MeaningCount > 0)
{
foreach (var meaning in synInfo.MeaningList as Array)
Console.WriteLine(meaning.ToString());
}
// release memory and quit Word app... (see below)
}
}
Run Code Online (Sandbox Code Playgroud)
使用Microsoft Office 2010和Microsoft Office 2013 Preview在Visual Studio 2010中使用.Net 4.0,引用Office 12 PIA.对于超过15万个不同的词,这就像一个魅力.但我注意到,对于某些词,方法get_SynonymInfo抛出异常:
Unhandled Exception: System.Runtime.InteropServices.COMException: Insufficient memory or disk space.
at Microsoft.Office.Interop.Word.ApplicationClass.get_SynonymInfo(String Word, Object& LanguageID)
at WordInteropTest.Program.Main(String[] args) in Program.cs:line 11
Run Code Online (Sandbox Code Playgroud)
我知道这些话引起了异常:
这与异常无关,但为了提供完整的源代码,我确实会释放内存并正确退出Word应用程序.退出测试程序时,进程列表中没有msword.exe.
// release memory and quit Word app... (continuing from above)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(synInfo);
app.Quit(Word.WdSaveOptions.wdDoNotSaveChanges);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app);
Run Code Online (Sandbox Code Playgroud)
手动使用Microsoft Word中的同义词库为所有单词提供正确的结果.
如何使用Interop代码避免异常并获得结果?是否有使用其他API的有效替代方案?
更新:我在本地编程网络论坛上被告知此代码适用于Office 2007.令我惊讶的是,确实如此.但是,如此问题中所述的Office 2010和2013 Preview不起作用,至少在我的计算机/ VM上不起作用.然后我尝试引用Office 14 PIA而不是Office 12,但使用Office 2013 Preview时,其行为相同.
我可以在Word 2010上的计算机上重现此问题.错误代码(HResult)是-2146822464或者0x800A16C0,在互联网上没有任何内容可以找到.
它发生当且仅当在Word中的同义词列表包含两种或多种类型的一个或多个同义词(如ADJ./诉,ñ./诉或形容词./ N. ).语言/词典并不重要.例如,onboard返回错误wdEnglishUS但不在wdEnglishUK,因为后者不知道该单词.两个词典中都存在其他词,并且在任何一种情况下都会出错.
显然这是一个错误,只有Word互操作的问题,因为Word本身显示它没有问题.据我所知,这是互操作允许你获取同义词信息的唯一方法,并且没有解决方法.
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |