Tengo un programa de prueba sencilla usando Microsoft Word interoperabilidad para obtener significados de las palabras del diccionario tesauro:get_SynonymInfo lanza insuficiente excepción de memoria para algunas palabras
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)
}
}
intentado esto con Microsoft Office 2010 y Microsoft Office 2013 de vista previa, usando .Net 4.0 en Visual Studio 2010, haciendo referencia a Office 12 PIA. Para más de 150 000 palabras diferentes, esto funciona como un encanto. Pero noto que para algunas palabras, el método get_SynonymInfo lanza una excepción:
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
Sé que estas palabras están causando una excepción:
- élite (pero "élites" Obras)
- cerca
- tuck
- alforzas
- caminar
- onboar d
- horrorizado
Esto no tiene nada que ver con la excepción, sino para dar un código fuente completo, yo libero memoria y salir de la aplicación Palabra correctamente. No hay msword.exe restante en la lista de procesos cuando salgo de mi programa de prueba.
// 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);
El uso del diccionario de sinónimos en Microsoft Word da manualmente los resultados adecuados para todas las palabras.
¿Cómo puedo evitar la excepción y obtener resultados usando el código Interop? ¿Hay alguna alternativa válida usando alguna otra API?
Actualización: me dijeron en un local programming web forum que este código funciona con Office 2007. Y para mi sorpresa, que lo hace. Pero con Office 2010 y 2013 Preview como se indica en esta pregunta, no funciona, al menos no en mis computadoras/máquinas virtuales. Luego traté de hacer referencia a Office 14 PIA en lugar de a Office 12, pero con Office 2013 Preview esto se comporta de la misma manera.
Parece que puede ser un problema de larga data con Word, porque todavía está allí (AFAICT) en 2013. Este https://groups.google.com/forum/?hl=es&fromgroups=#!topic/microsoft. public.office.developer.automation/ex58NtYsJmc sugieren usar Excel. – Fionnuala
El error es el mismo, pero tanto "pálido" como "desinflar" de esos hilos me funciona. –
Lo que creo que podría ser el problema es que todas estas palabras tienen homógrafos en la lista de significados. Por ejemplo, con "élite" hay "mejor (sustantivo)" y "mejor (adjetivo)". La interfaz de SynonymInfo no puede representar ambos. Word 2007 muestra esto como dos entradas distintivas en el panel Tesauro, pero la Vista previa de Word 2010 y 2013 lo muestra como la entrada combinada "mejor (sustantivo/adjetivo)". –