NullReferenceException异常创建Excel工作表(NullReferenceEx

2019-09-21 05:38发布

我想填补一个Excel文件,所以我使用ExcelPackage:的Office Open XML格式。 但我有一个错误。 我的代码:

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(); ,它的工作原理,并在Excel文件罢了,但它不保存。 为什么我取这个错误?

提前致谢..

Answer 1:

从ExcelWorksheet.cs的变线562:

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

至:

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

如果工作表没有被访问时,呼吁公众访问WorksheetXml而不是私有类变量正确initiallizes它。



Answer 2:

捕捉空引用异常由xlPackage.Save()方法抛出,和倾倒堆栈跟踪,这个问题似乎是越来越引起ExcelWorksheet.cs:线561,其对应于该线源:

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

有趣的是,如果你捕捉到了异常的XLSX文件似乎保存ok呢(至少对我是这样,可能会有一些意外的行为,但我无法产生任何)。

我想尝试处理异常,如果你的文件实际上是节省看到。 如果这是你要使用大量的库(我不知道),这可能是值得的ExcelPackage现场提出问题

编辑:

看来,ExcelPackage库是很老,而不是维护。 我得看看EPPlus库,它是基于ExcelPackage。 你需要调整了一下你的代码,但没有大的。 节能工作没有问题。

http://epplus.codeplex.com/



Answer 3:

我建议寻找到的Microsoft.Office.Interop.Excel引用。 我希望有更多的智能感知,但它很容易弄清楚。

我已经在我的使用设置:

using Excel = Microsoft.Office.Interop.Excel;

我猜你会希望应用程序是不可见的:

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

我没有用HttpContext的,但如果它是一个路径,那么我会使用Path类建议:

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是如果你仍在使用该版本包含在Visual Studio 2012和2010。 Excel中需要具有可执行的机器上。

祝您好运!



文章来源: NullReferenceException in creating Excel worksheet