2012-03-21 27 views
9

Nella mia applicazione asp.net, C# stiamo generando e scaricando il file .xls. Ma quando sto cercando di aprire, è dare un messaggioPerché mostrare un messaggio di errore durante l'apertura del file .xls

"Il file che si sta tentando di aprire, 'filename.xls', è in un formato diverso da quello specificato dall'estensione del file. Verificare che il il file è non danneggiato e proviene da una fonte attendibile prima di aprire il file. Fare si desidera aprire il file ora? "

Se premo "Sì" si sta aprendo. Ho cambiato l'estensione del file in .xlsx, sempre lo stesso messaggio. Qualcuno può dirmi perché questo sta accadendo? Ho aggiunto l'estensione di tipo MSS .xlsx nel gestore IIS con Tipo MIME come application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Sta ancora mostrando lo stesso messaggio. Si prega di suggerire come posso sbarazzarmi di esso.

+0

si prega di inviare il codice –

+0

Si prega di mostrare come si genera il XLS? È in formato Excel XML, quindi l'estensione dovrebbe essere xml. –

+0

quale codice stai chiedendo? – Sukanya

risposta

1

si crea completamente il file xls o fare si copia e compilare un file xls modello? Un file modello di formato errato può causare il problema.

Inoltre, quale provider usi per riempire il tuo file? - Microsoft.ACE.OLEDB.12.0 per xlsx/xlsm? - Microsoft.Jet.OLEDB.4.0 per xls?

Una combinazione errata di provider/interno può causare il problema.

Secondo il vostro commento, qui è una parte di codice in cui ho fatto in passato: (commentato alcune delle linee come non mi ricordo perché essi dove utile)

Response.Clear();       
Response.ContentType = "application/vnd.ms-excel"; 
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ", 
    String.Format(@"attachment; filename={0}",myfileName)); 

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush(); 
Response.Close(); 
+0

Sto creando il file .xls. All'inizio sto recuperando i dati usando la query sql dal database sqlserver. Quindi sto popolando i dati in un GridView. Dopo aver usato StringWriter e HtmlTextWriter, sto scrivendo string attachment = "filename =" + File.xls; Response.ClearContent(); Response.AddHeader ("content-disposition", allegato); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; GridView1.RenderControl (HTW); Response.Write (sw.ToString()); Response.End(); In questo modo sto generando il file excel. – Sukanya

+0

il tuo codice è simile a quello che ho. Ma il tuo codice mostra anche lo stesso messaggio. – Sukanya

+0

Esiste un altro modo per creare un file excel dai dati del server SQL? – Sukanya

0

Si sta utilizzando .xls nel nome file e .xlsx nel tipo MIME. Prova con filname.xlsx.

+0

Ho provato entrambe le estensioni in Tipo MIME. Sta mostrando lo stesso messaggio. – Sukanya

1

Non so come esportare i dati per eccellere. Potrebbe essere utile impostare DisplayAlerts su false.

xlApp = new Excel.Application(); 
xlApp.DisplayAlerts = false; 

Uso DLL interop. Lo spazio dei nomi sarebbe Microsoft.Office.Interop.Excel. La risposta di See Feng Chen nel seguente link su come aggiungere il riferimento: http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

Il seguente link potrebbe anche aiutare:

http://www.dotnetperls.com/excel

+0

qual è lo spazio dei nomi per utilizzare Excel.Application? – Sukanya

+0

L'aggiunta di questa DLL ha creato un sacco di problemi. Non mi permette nemmeno di aprire il progetto stesso ... Quindi ... – Sukanya

+0

Probabilmente dovresti menzionare come stai esportando Excel nel tuo codice. – Manoj

3

Questo uno potrebbe essere un vecchio post, ma ho cercato risposte per lo stesso problema e ho pensato che potesse essere utile. Sembra che non sia correlato al modo in cui la tua applicazione fornisce il file xls al browser. È un problema con l'eccesso di sicurezza di Office 2007.

di Microsoft KB article 948615 lo spiega:

Quando si apre un file in Excel 2007, viene visualizzato un messaggio di avviso che il formato di file differisce dal formato che l'estensione del file specifica.

L'unica soluzione è aggiungere una voce nel registro del client. So che non è una soluzione reale per un'applicazione web, magari con centinaia di utenti, ma almeno è possibile aggiungere una nota alla pagina che spiega come risolvere quel fastidioso avvertimento.

1

L'avviso è una nuova funzionalità di sicurezza in Excel 2007 denominata Extension Hardening, che garantisce che il contenuto del file in fase di apertura corrisponda al tipo di estensione specificato nel comando shell che sta tentando di aprire il file. Il design attuale non consente di aprire il contenuto HTML da un sito Web in Excel a meno che l'estensione dell'URL sia .HTM/.HTML/.MHT/.MHTML. Quindi le pagine ASP che restituiscono HTML e impostano il tipo MIME su qualcosa come XLS per provare a forzare l'HTML ad aprirsi in Excel invece del browser web (come previsto) otterranno sempre l'avviso di sicurezza poiché il contenuto non corrisponde al tipo MIME.

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

0

Il .xls estensione del file (versione 2003) supporta il layout HTML, mentre Office 2007 o versioni successive non lo supportano.

È necessario esportare il file excel in formato .xlsx. Dalla mia esperienza lo supporterò quindi in tutte le versioni.

Aggiungi al di sotto DLL nella cartella bin

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

Codice per file di esportazione di .xlsx

DataTable dt = new DataTable(); 
    //Create column and inser rows 
    using (XLWorkbook wb = new XLWorkbook()) 
    {   
       var ws = wb.Worksheets.Add(dt, Sheetname); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Charset = ""; 
       HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx"); 
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream); 
        HttpContext.Current.Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
    }