2012-09-11 9 views
9

Ho una vista del rasoio che voglio esportare in Excel.Esporta la visualizzazione per eccellere con il rasoio senza perdere lo stile

sto usando questa linea, a mio avviso per farlo:

Response.AddHeader("Content-Type", "application/vnd.ms-excel");  

Quando io commento questa linea, posso vedere la vista con lo stile che voglio. Quando interrompo il commento e lo chiedo, il browser mi chiede di scaricare il file Excel come dovrebbe. Ma il problema è quando ho aperto il file, ottengo questo errore

Missing file c:\scrips\excel.css 

che è il css che sto usando per visualizzare la pagina.

Quindi, come posso salvare il file con il suo layout?

+1

Dovrai pubblicare un vero file Excel, o se stai solo inviando una tabella HTML quindi includi gli stili nell'HTML anziché collegarli. –

risposta

15

Probabilmente sarà necessario creare una vista "EXPORT" separata. Ciò significa che è il proprio controller Action e lo stesso View. La vista dovrà essere identica a ciò che si desidera rendere il file Excel risultante. Deve essere autonomo. Nessun layout e un tag di stile che contiene il css all'interno (nessun collegamento di stili/script/etc).

Ecco un semplice esempio:

Diciamo che avere un Controller chiamato "casa".

azione all'interno HomeController:

public ActionResult Export() 
{ 
    Response.AddHeader("Content-Type", "application/vnd.ms-excel"); 
    return View(); 
} 

View (Home \ Export.cshtml):

@{ 
    Layout = ""; 
} 
<style type="text/css"> 
    body {font-family: Tahoma;} 
    h2 {color:red} 
    table {border:1px solid black; border-spacing:0} 
    td {color:green; font-size:.8em; padding:5px} 
    .heading {background:#ccc} 
</style> 

<h2>Test</h2> 

<table> 
    <tr class="heading"> 
     <th>Name</th> 
     <th>Age</th> 
    </tr> 
    <tr> 
     <td>Test1</td> 
     <td>15</td> 
    </tr> 
    <tr> 
     <td>Test2</td> 
     <td>16</td> 
    </tr> 
</table> 

Una volta che si carica la pagina, sarà pop-up con una scatola di scaricare e si aprirà in Excel con gli stili appropriati.

+0

Ha funzionato, grazie. – kbaccouche

1

Il controller deve disporre di un'azione che serve effettivamente il file Excel, non una pagina Web contenente il file Excel. L'azione del controller dovrebbe essere qualcosa di simile.

public ActionResult Export() 
{ 
    byte[] doc = GetExcelFileSomehow(); 
    var file = File(doc, "application/vnd.ms-excel"); 
    file.FileDownloadName = "MyFile.xlsx"; 
    return file; 
} 
+0

Ma dal mio punto di vista sto raccogliendo dati dal controller e facendo statistiche su di essi. Posso fare lo stesso con un file Excel? – kbaccouche

+0

@the_ruby_racer Sì, usa alcune librerie come EPPlus per creare dinamicamente il file Excel. –

Problemi correlati