8

我想填写一个 excel 文件,所以我使用 ExcelPackage: Office Open XML Format 。但我有一个错误。我的代码:

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 文件,但不保存。为什么我会犯这个错误?

提前致谢..

4

3 回答 3

2

将 ExcelWorksheet.cs 的第 562 行更改为:

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

至:

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

如果尚未访问工作表,则调用公共访问器 WorksheetXml 而不是私有类变量会正确初始化它。

于 2017-03-27T20:31:24.370 回答
0

我建议查看 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。

祝你好运!

于 2013-03-07T06:27:34.423 回答
0

捕获由 xlPackage.Save() 方法引发的空引用异常,并转储堆栈跟踪,问题似乎是由 ExcelWorksheet.cs:line 561 引起的,它对应于源代码中的这一行:

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

有趣的是,如果你捕捉到异常,xlsx 文件似乎仍然可以保存(至少对我来说确实如此,可能会有一些意想不到的行为,但我无法产生任何行为)。

我会尝试处理异常并查看您的文件是否实际保存。如果这是一个你会经常使用的库,那么在 ExcelPackage 网站上提出一个问题可能是值得的(我不这样做)

编辑:

似乎 ExcelPackage 库很旧并且没有维护。我会看一下基于 ExcelPackage 的 EPPlus 库。您需要调整一些代码,但没什么大不了的。保存作品没有问题。

http://epplus.codeplex.com/

于 2012-08-15T08:00:25.327 回答