2014-09-09 10 views
7

Sto creando un file Excel utilizzando la libreria EPPlus. Quando creo il file e apro il file, viene visualizzato il seguente messaggio:Finestra di dialogo di errore visualizzata all'apertura di un file Excel generato con EPPlus

Abbiamo riscontrato un problema con alcuni contenuti in "ExcelDemo.xlsx". Vuoi che cerchiamo di recuperare il più possibile? Se si considera attendibile l'origine di questa cartella di lavoro, fare clic su Sì

Sto usando seguente codice

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()); 
} 

C'è problema nel mio codice o si tratta di un problema di Excel?

+0

Ho trovato [questo forum] (https://social.technet.microsoft.com/Forums/office/en-US/f217048b-aa7c-4b6e-a346-59e0445543f6/we-found-a-problem-with- some-content-in-filenamexlsxdo-vuoi-us-to-try-to-recover-as-much-as-forum = excel) che suggerisce che puoi usare solo la proprietà 'Cell.Value' per i numeri che causano il problema che vedi. – chancea

risposta

21

All'inizio, è necessario aggiungere in un:

Response.Clear(); 

Poi, alla fine aggiungere un

Response.End(); 
+1

Stavo avendo lo stesso problema e questo l'ha risolto, così facile! Grazie per l'aiuto! –

+0

fantastico. Facile e funziona –

2

voglio condividere la mia soluzione. Sto usando un file excel template e quindi creo un nuovo excel da esso.

Ricezione dello stesso errore. Il mio codice è stato

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 
} 

ho dovuto cambiare il codice per:

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

Anche io sto usando ASP MVC e la risposta è:

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

Nel mio caso il problema era nel chiamare

package.Save(); 

e utilizzare

Response.BinaryWrite(package.GetAsByteArray()); 

allo stesso tempo.

Quando si chiama package.GetAsByteArray() è perfoms seguenti operazioni: internamente

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

Così, chiamando package.Save due volte porta a questo errore quando si apre in Excel.

Problemi correlati