我想编写一个程序来读取一大堆 word 97 文件 (.doc) 并将它们保存为 .docx 文件。我仅限于 .Net 2.0。
在这个阶段,我只想让它与我的 stub 代码一起工作 - 然后我将编写 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。
谁能告诉我上面的代码有什么问题,为什么不保存,以及如何解决?
谢谢
最佳答案
您陷入了 DLL hell 。只有在计算机上安装了 Office 2010 时才使用 SaveAs2()。任何以前的版本确实会用 AccessViolation 轰炸,该方法未实现。使用正确的 PIA 版本也可以大大避免此问题,请务必使用您愿意支持的最低版本。
使用 SaveAs() 方法。
关于保存时 C# Word Interop AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533302/