【ASP.NET MVC】在您的網站上加入匯入或匯出 Excel 功能(二)

【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的檔案格式了!簡單又明瞭吧?

快動手試試看!

 


 

大家好我是饅頭,希望大家喜歡我的文章

如果有錯誤的地方請不吝指教 ^_^