2014-09-09 5 views
7

Tworzę plik programu Excel przy użyciu biblioteki EPPlus. Po utworzeniu pliku i otworzeniu pliku pojawi się następujący komunikat:Okno dialogowe błędu wyświetlane podczas otwierania pliku programu Excel wygenerowanego za pomocą programu EPPlus

Znaleźliśmy problem z pewną zawartością w "ExcelDemo.xlsx". Czy chcesz, abyśmy starali się odzyskać jak najwięcej? Jeśli ufasz źródło tego skoroszytu, kliknij przycisk Tak

Używam następujący kod

using (ExcelPackage pck = new ExcelPackage()) 
{ 
    //Create the worksheet 
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo"); 

    //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1 
    ws.Cells[1, 2].Value = "Excel Download"; 

    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx"); 
    Response.BinaryWrite(pck.GetAsByteArray()); 
} 

Czy istnieje problem w moim kodu lub jest to problem Excel?

+0

Znalazłem [to forum] (https://social.technet.microsoft.com/Forums/office/en-US/f217048b-aa7c-4b6e-a346-59e0445543f6/we-found-a-problem-w-- some-content-in-filenamexlsxdo-you-want-us-to-try-to-recover-as-much-as? forum = excel) sugerujące, że możesz używać tylko właściwości 'Cell.Value' dla liczb, które powodują problem, który widzisz. – chancea

Odpowiedz

21

Na początku, trzeba dodać w a:

Response.Clear(); 

Następnie na koniec dodać

Response.End(); 
+1

Miałem ten sam problem i to naprawiło to, tak łatwo! Dzięki za pomoc! –

+0

niesamowite. Łatwy i działa –

2

będą dzielić moje rozwiązanie. Korzystam z pliku szablonu Excela, a następnie utworzę z niego nowy program Excel.

Otrzymuje ten sam błąd. Mój kod był

using (Stream newFileStream = File.Open(this.tempFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) 
using (Stream originalFile = File.Open(this.initialFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (ExcelPackage excelPackage = new ExcelPackage(newFile, template)) 
{ 
     // ... Do work here 
} 

musiałem zmienić kod w celu:

FileInfo intialInfo = new FileInfo(this.initialFilePath); 
FileInfo tempFileInfo = new FileInfo(this.tempFilePath); 
using (ExcelPackage excelPackage = new ExcelPackage(tempFileInfo, intialInfo)) 
{ 
    //... Do work here 
} 

Również używam ASP MVC i odpowiedź brzmi:

byte[] result = exporter.GetBytesFromGeneratedExcel(); 
return this.File(result, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Test.xlsx"); 
0

W moim przypadku problem był w nazywaniu

package.Save(); 

i za pomocą

Response.BinaryWrite(package.GetAsByteArray()); 

w tym samym czasie.

Po wywołaniu package.GetAsByteArray() to perfoms następujące operacje wewnętrzne:

this.Workbook.Save(); 
this._package.Close(); 
this._package.Save(this._stream); 

Więc, nazywając package.Save dwa razy prowadzi do tego błędu podczas otwierania w programie Excel.