2011-04-03 42 views
5

當我想編寫一個程序,這將在一大堆字97個文件(.DOC)的讀取,並將其保存爲.DOCX文件。我僅限於.Net 2.0。C#字的Interop AccessViolationException節省

在這個階段,我只想把它與我的存根代碼的工作 - 然後我會寫的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未保存。

可有人請讓我知道什麼是錯的,上面的代碼,爲什麼它不節能,以及如何解決它?

謝謝

+0

如何發佈確切的異常(與細節)? – steinar 2011-04-03 23:47:26

回答

10

你被困在DLL地獄。只有在計算機上安裝了Office 2010時才使用SaveAs2()。任何之前的版本確實會用AccessViolation炸彈,該方法沒有實現。使用適當的PIA版本也會有很長的路要走,以避免這個問題,一定要使用你願意支持的最低版本。

使用SaveAs()方法。

+0

感謝漢斯。 'SaveAs()'在互操作庫的版本14中不可用,但在版本12中可用。奇怪的是,它在PowerPoint互操作的版本14中可用。我已經按照你的建議用'SaveAs()'修復了它,並且它效果很好。 :) – Ozzah 2011-04-04 02:41:54