【问题标题】:C# Word Interop AccessViolationException when saving保存时 C# Word Interop AccessViolationException
【发布时间】:2011-04-04 10:39:50
【问题描述】:

我想编写一个程序,它将读取一大堆 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 没有保存。

谁能告诉我上面的代码有什么问题,为什么它没有保存,以及如何修复它?

谢谢

【问题讨论】:

  • 发布确切的例外情况(附详细信息)怎么样?

标签: c# ms-word office-interop


【解决方案1】:

您被困在 DLL 地狱中。只有在计算机上安装了 Office 2010 时才使用 SaveAs2()。任何先前的版本确实会因 AccessViolation 爆炸,该方法未实现。使用正确的 PIA 版本也可以避免此问题,请务必使用您愿意支持的最低版本。

使用 SaveAs() 方法。

【讨论】:

  • 谢谢汉斯。 SaveAs() 在互操作库的版本 14 中不可用,但在版本 12 中可用。奇怪的是,它在 PowerPoint 互操作的版本 14 中可用。我已经按照你的建议用SaveAs() 修复了它,效果很好。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多