2012-10-04 9 views
5

Mevcut excel 2003 şablonunu (xlt) düzenlemek ve yeni bir * .xls dosyasına kaydetmek için basit bir C# uygulaması yapıyorum. Sonra ben dosyanın içindeki çeşitli formüller kullanılmaktadır bazı hücreleri değiştirmek ve yeni bir dosyaya şablonu kaydetmekExcel 2003 dosyasını kaydedin

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open("\\my_template.xlt"); 
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[0]; 

: Sanki olduğunu

workbook.SaveAs("newfile.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); 
workbook.Close(true, misValue, misValue); 
app.Quit(); 

worksheet = null; 
workbook = null; 
app = null; 

Yani sorun olduğunda yeni bir dosya olduğunu başarılı bir şekilde kaydedildiğini açtım ve düzenlediğim hücreleri kullanan formüllerin sonuçlarının "#NAME" gibi olduğunu görüyorum. Dosyayı yeniden açtığımda - her şey yolunda gidiyor. Neden oluyor?

Belki dosyayı yanlış yoldan kaydediyorum ve bu yüzden ilk açılış sırasında hataları görüyorum? Bu sorun sadece 2003 ofisi için geçerli ... kabul ettiğim gibi.

+0

Söz ettiğiniz hangi birlikte çalışma derlemesi versiyonu? –

+3

Hücreleri nasıl düzenliyorsunuz? – oberfreak

cevap

3

olarak xlWorkbookNormalxlExcel8 yerine için numaralandırma değiştirmek here sözü ve bu doğru formatta kaydedecektir.

İkincisi, gerçekten Net bir şey yapmaz boş için referans değerlerinin belirlenmesinde, bu VB6 gibi değil, çöp toplayıcı bir referans artık kullanılıyor zaman anlamaya ve bunu temizlemek için yeterince akıllı.

Üçüncü olarak, Net 4 veya üstü kullanıyorsanız, sen Çalışma Kitabı Kapat yönteminin isteğe bağlı argümanlar değerlerini sağlamak gerekmez, bu nedenle bu gibi iyi çalışır:

workbook.Close(true); 

Son olarak, Eğer bir çalışma sayfası olarak çalışma sayfası döküm gerekmez, sadece bunu yapabilirsiniz: bir kez yapılır uygulama nesnesi serbest bırakmak için mareşal kullanın

Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Sheets[0]; 

son bir düşünceyi veya Excel asmak olacak senin görev yöneticisi sonsuza dek (belki de bir try bloğu içinde yapmanız gerekenleri yapın ve sonra Bir nihayet bloğunda bu):

Marshal.ReleaseComObjct(app); 

yöntemin sürümü altındadır Güncel:

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 

try 
{ 
    Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open(@"\my_template.xlt"); 
    Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Sheets[0]; 

    //Do stuff 

    workbook.SaveAs("newfile.xls", Microsoft.Office.Interop.Excel.XlFileFormat..xlExcel8); 
    workbook.Close(true); 
    app.Quit(); 
} 
finally 
{ 
    Marshal.ReleaseComObject(app); 
} 
+0

Tavsiyenizi daha sonra test edip sonucu burada rapor edeceğim, thx! – TakinosaJi

+0

Bana yardımcı olmadı ..... – TakinosaJi

+0

Well 'xlExcel8', Excel 2003 çalışma kitaplarını kaydetmek için doğru numara, değerlerinizi" Değer "veya" Değer2 "özelliği ile mi ayarlıyorsunuz? – JMK