保存时C#Word Interop AccessViolationException

时间:2011-04-03 23:43:23

标签: c# ms-word office-interop

我想编写一个程序,它将读取一大堆word 97文件(.doc)并将它们保存为.docx文件。我被限制在.Net 2.0。

在这个阶段,我只想让它使用我的存根代码 - 然后我会编写GUI和逻辑来在多个位置打开多个文件等...

这是我到目前为止所拥有的:

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

然后

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;

据我所知,word文档正在打开。 但是,SaveAs2()命令似乎抛出AccessViolationException并且未保存.docx。

有人可以让我知道上面代码有什么问题,为什么不保存,以及如何解决?

由于

1 个答案:

答案 0 :(得分:11)

你被困在DLL地狱中。仅在计算机上安装Office 2010时使用SaveAs2()。任何以前的版本确实会使用AccessViolation进行轰炸,该方法未实现。使用正确的PIA版本也可以避免这个问题,请务必使用您愿意支持的最低版本。

使用SaveAs()方法。