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();と動作し、エクセルファイルに記入しますが、保存しません。なぜこのエラーが発生するのですか?

前もって感謝します..

4

3 に答える 3

0

xlPackage.Save()メソッドによってスローされたnull参照例外をキャッチし、スタックトレースをダンプすると、問題は、ソースのこの行に対応するExcelWorksheet.cs:line561が原因で発生しているようです。

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

興味深いことに、例外をキャッチすると、xlsxファイルはとにかく問題なく保存されるようです(少なくとも私にとっては、予期しない動作が発生する可能性がありますが、生成できませんでした)。

例外を処理して、ファイルが実際に保存されているかどうかを確認してみます。これが頻繁に使用するライブラリである場合は、ExcelPackageサイトで問題を提起する価値があるかもしれません(私はしません)

編集:

ExcelPackageライブラリはかなり古く、保守されていないようです。ExcelPackageに基づくEPPlusライブラリを見てみます。コードを少し調整する必要がありますが、大きなことは何もありません。保存は問題なく機能します。

http://epplus.codeplex.com/

于 2012-08-15T08:00:25.327 に答える
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 に答える