2012-09-11 8 views
9

Mam widok brzytwy, który chcę wyeksportować do programu Excel.Eksportuj widok, aby wypromować maszynkę bez utraty stylu

używam tej linii w moim zdaniem to zrobić:

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

Kiedy skomentować ten wiersz, mogę zobaczyć widok ze stylem chcę. Kiedy odkomentuję to i poprosię o to, przeglądarka prosi mnie o pobranie pliku Excel, tak jak powinien. Ale problem jest, gdy otwieram plik, pojawia się ten błąd, który jest css używam, aby wyświetlić stronę.

Jak mogę zapisać plik z jego układem?

+1

Musisz albo podać rzeczywisty plik Excel, albo tylko wysyłasz tabelę HTML, a następnie dołącz style do kodu HTML zamiast je łączyć. –

Odpowiedz

15

Najprawdopodobniej konieczne będzie utworzenie osobnego widoku "EKSPORT". Oznacza to, że jest to kontroler własny, sam w sobie. Widok musi być identyczny z tym, jak ma wyglądać wynikowy plik Excel. To musi być samodzielne. Brak układu i znacznika stylu, który zawiera css wewnątrz (bez łączenia stylów/skryptów/etc).

Oto prosty przykład:

Powiedzmy masz Controller o nazwie „dom”.

Action wewnątrz HomeController:

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

Zobacz (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> 

Po załadowaniu strony, będzie to pop-up z pudełkiem do pobrania , a otworzy się w programie Excel z odpowiednimi stylami.

+0

Zadziałało, dzięki. – kbaccouche

1

Twój kontroler powinien mieć działanie, które faktycznie obsługuje plik Excel, a nie stronę internetową zawierającą plik Excel. Działanie kontrolera powinno być podobne.

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

Ale według mnie zbieram dane od kontrolera i robię na nich statystyki. Czy mogę zrobić to samo z plikiem Excel? – kbaccouche

+0

@the_ruby_racer Tak, użyj biblioteki takiej jak EPPlus, aby dynamicznie utworzyć plik Excel. –

Powiązane problemy