7

Bir excel dosyasını doldurmak istiyorum ve böylece ExcelPackage: Office Açık XML Biçimi kullanın. ama bir hatam var. kodum:NullReferenceException Excel çalışma sayfası oluşturma

string fileName = "DBE_BAKIM_FORMU" + ".xlsx"; 
FileInfo fi = new FileInfo(HttpContext.Current.Server.MapPath("~/") + fileName); 

using (ExcelPackage xlPackage = new ExcelPackage(fi)) 
{ 
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1]; 
    dbeDataContext db = new dbeDataContext(); 
    CAGRI c = (from x in db.CAGRIs where x.CagriID == ID select x).SingleOrDefault(); 
    USER u = (from x in db.USERs where x.UserID == Convert.ToInt32(Session["user"]) select x).SingleOrDefault(); 

    worksheet.Cell(6, 3).Value = c.TalepTarihi.ToShortDateString(); 
    worksheet.Cell(7, 3).Value = c.TalepTuru; 
    worksheet.Cell(8, 3).Value = c.ModulAdi; 
    worksheet.Cell(9, 3).Value = c.EkranRaporAdi; 
    worksheet.Cell(10, 3).Value = c.VerilenSure; 
    worksheet.Cell(11, 4).Value = c.USER.UserName + " " + c.USER.UserSurname; 
    worksheet.Cell(12, 4).Value = Convert.ToString(c.USER.UserTel); 
    worksheet.Cell(13, 3).Value = c.Aciklama; 
    worksheet.Cell(16, 4).Value = u.UserName + " " + u.UserSurname; 
    worksheet.Cell(18, 3).Value = Convert.ToString(c.DegerlendirmeTarih); 
    worksheet.Cell(19, 3).Value = c.Degerlendirme; 
    xlPackage.Save(); 
} 

burada bu hata var: xlPackage.Save();

benim hata i xlPackage.Save(); dışarı alırken Object reference not set to an instance of an object.

, nasıl çalıştığını ve excel dosyasında doldurur ama kaydetmez söylüyor . neden bu hatayı alıyorum? null başvuru özel alıcı

önceden sayesinde ..

+0

hayır bu desteklenmez. Ben xlPackage.Workbook.Worksheets denedim [1] .Save ama desteklenmiyor. – rockenpeace

+2

Eh, xlPackage'ın kendisi daha önce kullandığınız için boş değil gibi görünüyor. Bu yüzden lütfen tüm Stack Trace'ı "ExcelWorksheet" sınıfında dahili bir şey olarak yayınlayın. –

+0

Bu satır, "NullReferenceException" öğesinde yığın izlemenin en düşük kısmı mı? –

cevap

0

xlPackage.Save() metodu ile atılmış ve yığın izleme damping sorun ExcelWorksheet.cs neden elde görünmektedir: hattı 561 olan kaynağındaki bu hat karşılık gelir: (en azından benim için istisna xlsx dosyalarını yakalarsa zaten ok kaydettiği görülüyor İlginçtir ki

XmlNode pageSetup = _worksheetXml.SelectSingleNode("//d:pageSetup", NameSpaceManager); 

, öyle, 'orada bazı beklenmedik davranışlar olabilir, ama ben edemedim olabilir t üretmek herhangi).

İstisnai tutmayı ve dosya kaydetmenin gerçekten kaydedip kaydetmediğini görmeyi denerdim. Bu size çok kullanıyor gidiyoruz bir kütüphane olup olmadığı ExcelPackage sitesinde bir soru sorarak değer olabilir (I do not)

DÜZENLEME:

ExcelPackage kütüphanesi oldukça eski gibi görünüyor ve korunmaz. ExcelPackage'a dayanan EPPlus kütüphanesine bir göz atabilirim. Kodunuzun bir kısmını düzeltmeniz gerekecek ama büyük bir şey değil. Tasarruf sorunsuz çalışır.

http://epplus.codeplex.com/

+0

o _worksheetXml ve NameSpaceManager ilgili bir hata verir çünkü ben denemek olamazdı karşı karşıyayım, geliyor. hata, mevcut bağlamda mevcut olmadığını söylüyor. o Açık XML formatı kullanarak olduğuna göre – rockenpeace

0

Ben Microsoft.Office.Interop.Excel referans bakarak öneriyoruz. Keşke daha fazla intellisense olsaydı, ama anlaması oldukça kolaydı.

Ben benim kadar kullanarak belirledik: o eğer ben HttpContext kullanılmaz ettik

Excel.Application application = new Excel.Application(); 
application.Visible = false; 

ama: Sana uygulama görünmez olmak isteyeceksiniz tahmin ediyorum

using Excel = Microsoft.Office.Interop.Excel; 

burada bir sayfa kapmak ve nasıl doldurulacağını var,

string filename = "DBE_BAKIM_FORMU.xlsx"; 
Excel.Workbook book = application.Workbooks.Open(Path.Combine(HttpContext.Current.Server.MapPath("~/"), filename)); 

kod benzer olmalıdır: bir yol, o zaman ben yolu sınıfını kullanarak öneriyorum Hücreler:

Excel.Worksheet sheet = book.Worksheets[1]; 
sheet.Cells[6, 3].Value2 = "Something"; 

Tasarruf ve kapanış: Hala bu sürümünü kullanıyorsanız

book.Save(); 
book.Close(); 

Microsoft.Office.Interop.Excel referans Visual Studio 2012 ve 2010 dahildir. Excel'de, çalıştırılabilir makinede gereklidir.

Şansın en iyisi!

XmlNode pageSetup = _worksheetXml.SelectSingleNode("//d:pageSetup", NameSpaceManager); 

için: den ExcelWorksheet.cs arasında

+0

, ben (bir sorun olması ihtimaline karşı) Excel yerel bir kopyasını gerektirmez ve bir sunucu ortamında dostça olacağını Açık XML SDK, lehine birlikte çalışma kullanarak onu vazgeçirecek: https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – maniak1982

2

değişim çizgisi 562 genel erişimciyi çağırarak çalışma sayfası erişilmiş değilse

XmlNode pageSetup = WorksheetXml.SelectSingleNode("//d:pageSetup", NameSpaceManager); 

, özel sınıf değişkeni bunu initiallizes yerine WorksheetXml doğru şekilde.

İlgili konular