2012-10-24 32 views
20

Bir excel elektronik tablosundaki değişiklikleri excel interop yoluyla kaydetmenin bir yolu var (bu durumda buna bir çalışma sayfası ekliyorum). Mevcut dosyayı değişikliklerle üzerine yazmak istiyorlar. Kullanıcının e-tabloyu uygulamada açık olarak görmesini bile istemiyorum, böylece dosyanın üzerine yazmak isteyip istemediklerini soran bir ileti kutusuyla karşılaşmanız çok muhtemeldir ve muhtemelen kullanıcı için kafa karıştırıcı olabilir.Excel Interop ile varolan Excel dosyasını Kaydetme/Üzerine Yazma - C#

Çalışma kitabını kullanıyorum.SaveAs (fileloaction) yöntemi.

Burada excel interop için COM başvuru nesnelerini başlatıyorum.

private Excel.Application app = null; 
    private Excel.Workbook workbook = null; 

    public Excel.Workbook Workbook 
    { 
     get { return workbook; } 
     set { workbook = value; } 
    } 
    private Excel.Worksheet worksheet = null; 
    private Excel.Range workSheet_range = null; 

Excel dosyasını kapatmak/kaydetmek için kullanıyorum kod aşağıdadır. Workbook.close() yöntem satırı, bildirilmeyen bir şekilde işlenmeyen özel durumu atar.

ExcelApp.DisplayAlerts = False 
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave) 

Umut bu sadece bu kod durdurmak için gerektir olacak

cevap

52

Temelde, tek ihtiyacınız ExcelApp.DisplayAlerts = False olduğunu kullanımda geçersiz kılma uyarısı veya Şablon

ExcelApp.DisplayAlerts = False

+0

Müthiş sayesinde! Eğer şimdi sadece yukarıda yaptığım gibi kapatmak için bir yol bulabilirsem C# uygulamamın işlenmemiş bir istisna ve çarpışma atmasına sebep olur. Excel dosyasını kaydedip kapattıktan sonra uygulamayı kapatamıyorum. Açık kalması gerekiyor. – user1546315

+0

Biraz kod gönderebilir misiniz (veya bu soruna uymuyorsa bu kodla yeni bir soru gönderebilirsiniz) ... Bu garip ve eminim ki, kolayca düzeltilebilir ... –

+0

Gönderiyi güncelledim bazı kod ile. Daha fazlasına ihtiyacın olursa haberim olsun. Bu sorun hakkında birden çok ileti dizisi gönderdim, birkaç çözüm denedim ancak henüz excel çalışma kitabını işlenmemiş bir istisna atmadan ve C# uygulamasını çökertmeden kaydetme/kaydetme şansına sahip oldum. – user1546315

7

yardımcı olur: Burada Gerçi bunun için gereken adımları -

workbook.Close(true, startForm.excelFileLocation, Missing.Value); 
      Marshal.ReleaseComObject(app); 
      app = null; 
      System.GC.Collect(); 
0

Bunun eski bir yazı olduğunu biliyorum, ancak bu çalışmayı gelecekte olası bir hayal kırıklığına neden olmadan yapmanın bir yolunu paylaşmak istedim.

Ben kullanma konusunda ne gibi değil İlk: ExcelApp.DisplayAlerts = değil sadece programda, excel dosyası üzerinde bu özelliği ayarlar bu bayrak ayarlanması

Yanlış. Bu, bir kullanıcı dosyada değişiklik yapar ve kapatırsa (X'i tıklatarak) dosyayı kaydetmesi istenmez ve daha sonra hayal kırıklığına neden olur. Ayrıca, normalde yayınlayacağı diğer tüm komutları da devre dışı bırakır.

ben dosya varsa kaydetmeden önce kontrol gibi

: işe yaradı

 if (File.Exists(SaveAsName)) 
     { 
      File.Delete(SaveAsName); 
     } 
+0

Burada hiçbir değişiklik yapmadan ve kaydetmeden kapatılmadan denedim ve Excel'i kaydetmeye gerek yok. Dosya, yolunuzda da işe yarayacak, ancak ilki kadar basit değil. –