C#導出Excel
本教程可以實現在C#中導出Excel表格,並且設置Excel多級表頭的情況。
簡單來說,是在MemoryStream中進行的操作。
只提供一部分實現代碼,具體需要的api或者方法請自行百度。
1 //引用
2
3 using Aspose.Cells;
4
5 protected MemoryStream ConvertToStream_Report(List<EntityStatisticalSummary> list)
6
7 {
8
9 Workbook workbook = new Workbook();
10
11 Worksheet sheet = workbook.Worksheets[0];
12
13 Cells cells = sheet.Cells;
14
15 //自定義標題樣式
16
17 Style styleTitle = workbook.Styles[workbook.Styles.Add()];
18
19 styleTitle.HorizontalAlignment = TextAlignmentType.Center;
20
21 styleTitle.Font.Name = "宋體";
22
23 styleTitle.Font.Size = 18 ;
24
25 styleTitle.Font.IsBold = true;
這裏可以設置多種樣式,比如標題/副標題/數據等等,具體引用方法稍後再說。
//設置行數,list是根據表格結構拼湊好的數據list
int countRow = list.Count;
//設置列數,一般根據幾個標題設置幾列
int countCol = 25;
//標題,表格裏的首行
因為標題一般比較大,而且橫跨多行,這句就是設置這個的。
cells.Merge(0, 0, 1, countCol);
//cells.Merge(int firstRow, int firstColumn, int rowNumber, int columnNumber)
開始的第一行、第一列,跨幾行幾列(可以設置多行標題,就是相對麻煩點,不過可以實現)
比如說大標題這一行,假設左上角為第一行第一列,那麽四個參數分別是(1,1,1,9),解釋起來就是,從第二行第二列開始畫,高一個表格的高度,寬9個表格的寬度,以此類推,交叉型的標題比較麻煩些,耐心測試操作即可。
圖1
cells[0, 0].PutValue("****年****表");//寫入的值
cells[0, 0].SetStyle(styleTitle);//設置格式(剛剛上面自定義的)
cells.SetRowHeight(0, 30);
基礎表頭畫完之後,就可以開始設置內容部分了
//設置內容部分的樣式(同標題)
1 for (int i = 0; i < countRow; i++)
2
3 {
4
5 for(int j = 0; j < countCol; j++)
6
7 {
8
9 cells[i, j].SetStyle(styleField);
10
11 }
12
13 }
說一下比較常用的兩(三)個屬性:
SetColumnWidthPixel:該表格的寬度(像素)
SetColumnWidth(通上)
SetRowHeight該表格的寬度(指的是一個單元格)
如上圖1,如果是一級標題,下面包含多個二級標題,那麽一級標題的寬度默認為所有二級標題的寬度,即使設置了也不會有作用。
之後就可以導入數據了,大致就是list進行for循環對應單元格寫入了。
MemoryStream ms = workbook.SaveToStream();
return ms;
}
1 public ActionResult ExportExcel(string XMType, string Year, string Ztdm, string DW, string PC)
2
3 {
4
5 //獲取數據
6
7 var data = statistical_summary_bll.GetListAllBySql(XMType, Year, Ztdm, DW, PC).ToList();
8
9 //寫入memory stream
10
11 MemoryStream m = ConvertToStream_Report(data);
12
13 byte[] bytes = m.ToArray();
14
15 m.Close();
16
17 var ReportName = "";
18
19 //文件名
20
21 ReportName = "農村公路建設建議計劃年度匯總表" + DateTime.Now.ToString("yyyyMMddHHmmssffff");
22
23 //導出
24
25 return this.File(bytes, "application/ms-excel", Server.UrlEncode(ReportName + ".xls"));
26
27 }
C#導出Excel