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.

, 작동 및 엑셀 파일에 채우고 있지만 저장하지 않는 것을 말한다 . 왜이 오류가 발생합니까? 널 레퍼런스 예외를 캐치

미리 감사 ..

+0

아니요 지원되지 않습니다. xlPackage.Workbook.Worksheets [1] .Save 시도했지만 지원되지 않습니다. – rockenpeace

+2

글쎄, 전에 사용하기 때문에'xlPackage' 자체가 null이 아닌 것 같습니다. 그래서 전체 Stack Trace를'ExcelWorksheet' 클래스 내부에 게시하십시오. –

+0

그 줄은'NullReferenceException'에서 스택 추적의 가장 낮은 부분입니까? –

답변

0

는 xlPackage.Save() 메소드에 의해 발생되고, 상기 스택 트레이스를 덤핑하는 문제가 ExcelWorksheet.cs 의한 받고있는 것으로 보인다 : 선 (561)을 어느 소스에서이 라인에 해당합니다 (적어도 나를 위해 당신이 예외에게 XLSX 파일을 잡으면 어쨌든 확인을 저장하는 것 흥미롭게

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

것은, 그렇습니다 '가 예기치 않은 행동이 될,하지만 난 나오지 않았어 수 어떤 것도 생산하지 않는다).

파일을 저장하는 중 예외 처리를 시도해보고 싶습니다. 이것은 당신이 많이 사용하게 될 겁니다 라이브러리 인 경우가 ExcelPackage 사이트에 문제를 제기 가치가있을 수도 있습니다 (난 몰라)

편집 :

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; 

여기에 시트를 잡아 채우는 방법,

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에 포함되어 있습니다. 실행 파일이있는 컴퓨터에는 Excel이 필요합니다.

행운을 빈다.

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

에 :에서 ExcelWorksheet.cs의

+0

그는 Open XML 형식을 사용하고 있으므로 Open XML SDK를 사용하여 interop을 사용하지 않도록하십시오. Excel의 로컬 인스턴스가 필요하지 않으며 서버 환경에서 우호적 인 경우 (문제 인 경우) : https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – maniak1982

2

변화 라인 (562) 공공 접근을 호출 워크 시트에 액세스하지 않은 경우

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

, 전용 클래스 변수를 initiallizes 대신 WorksheetXml 바르게.

관련 문제