7

Excelファイルを埋めたいので、ExcelPackage:Office Open XMLフォーマットを使用します。しかし、私はエラーがあります。私のコード:Excelワークシートの作成時に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();

私のエラーは、私がxlPackage.Save();を取るときObject reference not set to an instance of an object.

、それが動作し、Excelファイルに記入し、それが保存されないことを言います。 なぜこのエラーが発生しますか? null参照の例外をキャッチ

事前のおかげで..

+0

いいえサポートされていません。私はxlPackage.Workbook.Worksheets [1] .Saveを試しましたが、サポートされていません。 – rockenpeace

+2

'xlPackage'自体が以前はそれを使用して以来、nullではないようです。だから、スタックトレース全体を 'ExcelWorksheet'クラスの内部に投稿してください。 –

+0

その行は 'NullReferenceException'のスタックトレースの最下位部分ですか? –

答えて

0

はxlPackage.Save()メソッドによってスローされ、およびスタックトレースをダンプすることは、問題がExcelWorksheet.csによって引き起こさなっているように見える:ライン561をどのあなたは例外をキャッチした場合のxlsxファイルはそれがない、少なくとも私にとっては(とにかくOK救うように見える、いくつかの予期しない動作があるかもしれません興味深いことに

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

が、私は「couldn:ソースにこのラインに対応任意のものを生成する)。

私はファイルを実際に保存している場合、例外を処理してみることを試みます。これはあなたが多くを使用することとしているライブラリがある場合、それはExcelPackageサイト上の問題を提起する価値があるかもしれません(私はしないでください)

EDIT:

ExcelPackageライブラリはかなり古いようです維持されていない。私はExcelPackageに基づいているEPPlusライブラリを見ています。あなたのコードのビットを微調整する必要がありますが、何も重要ではありません。問題なく保存できます。

http://epplus.codeplex.com/

+0

_worksheetXmlとNameSpaceManagerについてエラーが発生するため、試行できませんでした。エラーは、現在のコンテキストに存在しないことを示します。 – rockenpeace

0

私はMicrosoft.Office.Interop.Excel参照に探してお勧めします。もっとインテリセンスがあったほうがいいと思いますが、それはかなり簡単です。

私は私のように使用して設定している:それはだ場合、私はHttpContextを使用していませんでした

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

、しかし:私はあなたがアプリケーションが見えないようにしたいでしょう推測している

using Excel = Microsoft.Office.Interop.Excel; 

パスは、その後、私は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が必要です。

運が良かった!

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

へ:からExcelWorksheet.csの

+0

彼はOpen XMLフォーマットを使用しているので、Excelのローカルインスタンスを必要とせず、サーバー環境で面白い(問題の場合)Open XML SDKのためにinteropを使用することをお勧めします。 https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – maniak1982

2

チェンジ・ライン562のパブリックアクセサを呼び出すワークシートがアクセスされていない場合は

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

、プライベートクラス変数がそれをinitiallizes代わりにWorksheetXml正しく

関連する問題