2011-04-03 28 views
5

Quiero escribir un programa que leerá en un montón de archivos de Word 97 (.doc) y los guardará como archivos .docx. Estoy restringido a .Net 2.0.C# Word Interop AccessViolationException al guardar

En esta etapa, sólo quiero para que funcione con mi código auxiliar - entonces voy a escribir la interfaz gráfica de usuario y la lógica para abrir varios archivos en varias ubicaciones, etc ...

Esto es lo que tengo hasta ahora :

using MSWord = Microsoft.Office.Interop.Word; 
using MSPPoint = Microsoft.Office.Interop.PowerPoint; 

continuación, Por lo que yo puedo decir, se está abriendo

OpenFileDialog ofd = new OpenFileDialog() 
{ 
    CheckFileExists = true, 
}; 

if (ofd.ShowDialog() != DialogResult.OK) 
    return; 

MSWord.Application app = new MSWord.Application(); 
MSWord.Document doc = new MSWord.Document(); 

doc = app.Documents.Open(ofd.FileName); 

try 
{ 
    doc.SaveAs2(ofd.FileName + ".docx", MSWord.WdSaveFormat.wdFormatDocument); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Could not save because:\r\n" + ex.Message, 
    ex.GetType().ToString()); 
} 

doc.Close(); 
app.Quit(); 

return; 

la palabra documento. Sin embargo, el comando SaveAs2() parece arrojar un AccessViolationException y el .docx no se guarda.

¿Puede alguien decirme por favor cuál es incorrecto con el código antedicho, porqué no está salvando, y cómo solucionarlo?

Gracias

+0

¿Qué le parece publicar la excepción exacta (con detalles)? – steinar

Respuesta

10

Estás atrapado en DLL Hell. Solo use SaveAs2() cuando tenga instalado Office 2010 en la máquina. Cualquier versión anterior de hecho va a bombardear con AccessViolation, el método no está implementado. El uso de la versión PIA adecuada también sería muy útil para evitar este problema, asegúrese de usar la versión más baja que esté dispuesto a admitir.

Utilice el método SaveAs().

+0

Gracias Hans. 'SaveAs()' no está disponible en la versión 14 de la biblioteca de interoperabilidad, pero está disponible en la versión 12. Curiosamente, está disponible en la versión 14 de la interoperabilidad de PowerPoint. Desde entonces lo arreglé con 'SaveAs()' como sugirió y funciona muy bien. :) – Ozzah

Cuestiones relacionadas