2012-09-11 17 views
9

我有一個剃刀視圖,我想出口到Excel。出口視圖擅長剃刀而不失風格

我使用這條線,我認爲做到這一點:

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

當我評論這行,我可以看到我想要的風格的看法。當我取消註釋並詢問它時,瀏覽器會要求我下載Excel文件。但問題是當我打開文件,我得到這個錯誤

Missing file c:\scrips\excel.css 

這是我用來顯示頁面的CSS。

那麼如何讓文件保存在其佈局中呢?

+1

您將不得不提供一個實際的Excel文件,或者如果您只是發送一個HTML表格,那麼將樣式包含在HTML中而不是鏈接它們。 –

回答

15

您可能需要創建一個單獨的「EXPORT」視圖。這意味着,它自己的控制器ActionView本身。該視圖需要與您想要的結果Excel文件的外觀相同。它必須是獨立的。沒有佈局,以及一個樣式標籤,其中包含CSS(樣式/腳本/等沒有鏈接)。

這裏有一個簡單的例子:

比方說你有一個名爲Controller「家」。

行動HomeController

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

查看(首頁\ 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> 

一旦你加載這個頁面,它會用下載框彈出,它會在適當樣式的excel中打開。

+0

它的工作,謝謝。 – kbaccouche

1

您的控制器應該有一個實際服務於Excel文件的操作,而不是包含Excel文件的網頁。控制器的行爲應該是類似的。

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

但在我看來,我正在從控制器收集數據並對它們進行統計。我可以用Excel文件做同樣的事嗎? – kbaccouche

+0

@the_ruby_racer是的,使用EPPlus這樣的庫來動態創建Excel文件。 –