7

मैं एक्सेल फ़ाइल भरना चाहता हूं और इसलिए मैं ExcelPackage का उपयोग करता हूं: Office Open XML प्रारूप। लेकिन मुझे एक त्रुटि है। मेरी कोड:एक्सेल वर्कशीट बनाने में NullReferenceException

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(); 
} 

मैं यहाँ में यह त्रुटि है: xlPackage.Save();

मेरी त्रुटि का कहना है कि Object reference not set to an instance of an object.

जब मैं xlPackage.Save(); बाहर ले, यह काम करता है और एक्सेल फ़ाइल में भर जाता है, लेकिन यह नहीं सहेजता है । मैं यह त्रुटि क्यों ले रहा हूं? पहले से

धन्यवाद ..

+0

नहीं, यह समर्थित नहीं है। मैंने xlPackage.orkbook.Worksheets [1] की कोशिश की है। बचाओ लेकिन यह समर्थित नहीं है। – rockenpeace

+2

ठीक है, ऐसा लगता है कि 'xlPackage' स्वयं शून्य नहीं है क्योंकि आप इसे पहले इस्तेमाल करते हैं। इसलिए कृपया संपूर्ण स्टैक ट्रेस पोस्ट करें क्योंकि यह 'ExcelWorksheet' कक्षा में कुछ आंतरिक है। –

+0

क्या यह रेखा 'NullReferenceException' में स्टैक ट्रेस का निम्नतम भाग है? –

उत्तर

0

अशक्त संदर्भ अपवाद पकड़ने xlPackage.Save() विधि द्वारा फेंका जा रहा है, और स्टैक ट्रेस डंपिंग, समस्या ExcelWorksheet.cs की वजह से हो रही किया जा रहा है: लाइन 561 जो स्रोत में इस लाइन से मेल खाती है: (कम से कम मेरे लिए

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

दिलचस्प बात यह है, अगर आप अपवाद xlsx फ़ाइलों को पकड़ने के लिए वैसे भी ठीक बचाने के लिए लगता है यह होता है, वहाँ कुछ अनपेक्षित व्यवहार हो सकता है, लेकिन मैं नहीं कर सके ' कोई उत्पादन नहीं)।

मैं अपवाद को संभालने का प्रयास करता हूं और देखता हूं कि फ़ाइल वास्तव में सहेज रही है या नहीं। अगर यह एक पुस्तकालय आप एक बहुत का उपयोग किया जा रहे हैं है यह ExcelPackage साइट पर कोई समस्या उठाकर लायक हो सकता है (मैं नहीं)

संपादित करें:

ऐसा लगता है कि ExcelPackage पुस्तकालय काफी पुराना है और बनाए रखा नहीं है। मैं ईपीप्लस लाइब्रेरी पर एक नज़र डालेगा, जो ExcelPackage पर आधारित है। आपको अपने कोड का थोड़ा सा ट्विक करना होगा लेकिन कुछ भी बड़ा नहीं होगा। समस्या के बिना काम बचा रहा है।

http://epplus.codeplex.com/

+0

मैं कोशिश नहीं कर सका क्योंकि यह _worksheetXml और NameSpaceManager के बारे में त्रुटि देता है। त्रुटि कहती है कि वे वर्तमान संदर्भ में मौजूद नहीं हैं। – rockenpeace

0

मैं Microsoft.Office.Interop.Excel संदर्भ में देख सलाह देते हैं। मेरी इच्छा है कि वहां अधिक इंटेलिजेंस था, लेकिन यह पता लगाना बहुत आसान है।

मैं अपने रूप का उपयोग करते हुए निर्धारित किया है:

using Excel = Microsoft.Office.Interop.Excel; 

मैं तुम्हें आवेदन अदृश्य हो चाहता हूँ अनुमान लगा रहा हूँ:

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

मैं HttpContext उपयोग नहीं किया है, लेकिन अगर यह एक पथ, तो मैं पथ वर्ग का उपयोग करने की सलाह दूंगा:

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

कोड समान होना चाहिए, यहां एक शीट पकड़ने और भरने का तरीका बताया गया है कोशिकाओं:

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

सहेजा जा रहा है और समापन:

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

Microsoft.Office.Interop.Excel संदर्भ अगर आप अभी भी उस संस्करण का उपयोग कर रहे विजुअल स्टूडियो 2012, और 2010 में शामिल किया गया है। निष्पादन योग्य के साथ मशीन पर एक्सेल आवश्यक है।

शुभकामनाएँ!

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

लिए:

+0

चूंकि वह ओपन एक्सएमएल प्रारूप का उपयोग कर रहा है, इसलिए मैं उसे ओपन एक्सएमएल एसडीके के पक्ष में इंटरऑप का उपयोग करने से हतोत्साहित करता हूं, जिसके लिए एक्सेल के स्थानीय उदाहरण की आवश्यकता नहीं होती है और सर्वर वातावरण में मित्रवत होगा (यदि यह कोई मुद्दा है): https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – maniak1982

2

परिवर्तन से ExcelWorksheet.cs की लाइन 562

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

तो कार्यपत्रक पहुँचा नहीं किया गया है, सार्वजनिक एक्सेसर बुला के बजाय निजी वर्ग चर यह initiallizes WorksheetXml सही ढंग से।

संबंधित मुद्दे