【ASP.NET MVC】在您的網站上加入匯入或匯出 Excel 功能(二)
上一篇,與大家分享了如何上傳(匯入)Excel了,接下來鰻頭要說明該如何下載(匯出)Excel囉!
首先我們先用一個簡單的Controller,平常我們都是讓Controller 返回的是畫面(View)的部分,在MVC中也可以輕鬆的返回檔案(回傳檔案讓使用者下載)喔!
一開始我們要將資料從資料庫或是您的資料來源截取出來(這部分就由自己時做囉!),通常我們都會在Excel的最頂端建立一個表頭列,所以饅頭這邊先跟各位說明怎麼建立表頭囉
在建立表頭前,我們要先建立工作簿(跟匯入一樣),這部分一樣分為兩個運作方式,一個為Office 2003的傳統格式,另一個為Office 2007的XML格式
上一篇,與大家分享了如何上傳(匯入)Excel了,接下來鰻頭要說明該如何下載(匯出)Excel囉
首先我們先用一個簡單的Controller,平常我們都是讓Controller 返回的是畫面(View)的部分,在MVC中也可以輕鬆的返回檔案(回傳檔案讓使用者下載)喔!
一開始我們要將資料從資料庫或是您的資料來源截取出來(這部分就由自己時做囉!),通常我們都會在Excel的最頂端建立一個表頭列,所以饅頭這邊先跟各位說明怎麼建立表頭囉
在建立表頭前,我們要先建立工作簿(跟匯入一樣),這部分一樣分為兩個運作方式,一個為Office 2003的傳統格式,另一個為Office 2007的XML格式
Office 2007 XML格式
// 建立一個工作簿
XSSFWorkbook excel;
// 檔案讀取
using (FileStream files = new FileStream(fileLocation, FileMode.Open, FileAccess.Read))
{
excel = new XSSFWorkbook(files); // 將剛剛的Excel 讀取進入到工作簿中
}
Office 2003傳統格式
HSSFWorkbook excel;
using (FileStream files = new FileStream(fileLocation, FileMode.Open, FileAccess.Read))
{
excel = new HSSFWorkbook(files);
}
建立表頭
建立表頭前,要先建立一個資料列,在把表頭的資料填入資料列中
// 建立列
sheet.CreateRow(0);
// 設定表頭資料
sheet.GetRow(0).CreateCell(0).SetCellValue("Data1");
sheet.GetRow(0).CreateCell(1).SetCellValue("Date2");
存入資料
將資料填入Excel的活頁簿中,在迴圈的一開始都要先產生一個資料列
// 走訪所有資料,並建立列與設定資料
for (int i = 1; i <= exportdata.Count(); i++)
{
var excel = exportdata[i - 1];
sheet.CreateRow(i);
sheet.GetRow(i).CreateCell(0).SetCellValue("Data1");
sheet.GetRow(i).CreateCell(1).SetCellValue("Data2");
}
寫入串流資料
最後我們將資料寫入串流,或是將檔案存檔,這邊我們使用MemoryStream,也可以改為其他的Stream!
// 將資料寫入串流
MemoryStream files = new MemoryStream();
workSpase.Write(files);
files.Close();
最後在Controller回傳時使用File的方式回傳
// 2007
return this.File(files.ToArray(), "application/vnd.ms-excel", "Download.xlsx");
// 2003
return this.File(files.ToArray(), "application/vnd.ms-excel", "Download.xls");
如此一來我們下載的檔案就會是Excel的檔案格式了!簡單又明瞭吧?
快動手試試看!
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^