2011-04-03 17 views
5

Bir sürü kelime 97 dosya (.doc) okuyacak ve bunları .docx dosyaları olarak kaydedecek bir program yazmak istiyorum. Net 2.0 ile sınırlıyım. İşte C# Word Interop AccessViolationException, kaydederken

Ben bugüne kadar ne var ... o zaman vb GUI ve birden fazla yerde birden fazla dosya açmak için mantık, yazacak - Bu aşamada

, sadece benim saplama kodu ile çalışma olsun istiyorum : Söyleyebileceğim

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

sonra

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; 

Bildiğim kadarıyla, word belgesi açılıyor. Ancak, SaveAs2() komutu, bir AccessViolationException atıyor ve .docx kaydedilmez gibi görünüyor.

Birisi, lütfen yukarıdaki kodda neyin yanlış olduğunu, neden tasarruf etmediğini ve nasıl düzeltileceğini bana bildirebilir mi?

Teşekkürler

+0

Tam istisnayı (ayrıntılar ile) gönderme hakkında ne düşünüyorsunuz? – steinar

cevap

10

DLL Cehennemde sıkışmış durumdasınız. Yalnızca makineye Office 2010 yüklendiğinde SaveAs2() öğesini kullanın. Herhangi bir önceki sürüm gerçekten bir AccessViolation ile bombalanacak, yöntem uygulanmadı. Doğru PIA sürümünü kullanmak, bu sorunu önlemek için de uzun bir yoldan gidecektir, desteklemeye hazır olduğunuz en düşük sürümü kullandığınızdan emin olun.

SaveAs() yöntemini kullanın.

+0

Teşekkürler Hans. 'SaveAs()', birlikte çalışma kitaplığının sürüm 14'ünde yoktur, ancak sürüm 12'de kullanılabilir. Tuhaf olarak, PowerPoint birlikte çalışmasının 14 sürümünde kullanılabilir. O zamandan beri önerdiğin gibi SaveAs() ile sabitledim ve harika çalışıyor. :) – Ozzah

İlgili konular