2012-09-11 25 views
9

Tengo una vista de maquinilla de afeitar que quiero exportar para sobresalir.Exportar vista para sobresalir con maquinilla de afeitar sin perder el estilo

estoy usando esta línea en mi opinión, para hacerlo:

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

Cuando comento esta línea, que puede ver la vista con el estilo que quiero. Cuando lo descompongo y lo pido, el navegador me pide que descargue el archivo de Excel como debería. Pero el problema es cuando abro el archivo, obtengo este error

Missing file c:\scrips\excel.css 

que es el css que estoy usando para mostrar la página.

Entonces, ¿cómo puedo hacer que el archivo se guarde CON su diseño?

+1

Deberá presentar un archivo de Excel real, o si solo está enviando una tabla HTML, entonces incluya los estilos en el HTML en lugar de vincularlos. –

Respuesta

15

Probablemente necesite crear una vista "EXPORTAR" por separado. Esto significa que es su propio controlador Action y View sí mismo. La vista deberá ser idéntica a la que desea que tenga el archivo Excel resultante. Tiene que ser independiente. Sin diseño, y una etiqueta de estilo que contiene el CSS dentro (sin enlaces de estilos/scripts/etc).

Aquí está un ejemplo sencillo:

Digamos que tiene una Controller llamado "Inicio".

Acción dentro HomeController:

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

Ver (Inicio \ 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 vez que cargue esta página, que va a estallar para arriba con una caja de descarga , y se abrirá en excel con los estilos apropiados.

+0

Funcionó, gracias. – kbaccouche

1

Su controlador debe tener una acción que realmente sirve el archivo de Excel, no una página web que contiene el archivo de Excel. La acción del controlador debería ser algo así como.

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

Pero en mi opinión, estoy recopilando datos del controlador y haciendo estadísticas sobre ellos. ¿Puedo hacer lo mismo con un archivo de Excel? – kbaccouche

+0

@the_ruby_racer Sí, use alguna biblioteca como EPPlus para crear dinámicamente el archivo de Excel. –

Cuestiones relacionadas