1. 程式人生 > >C#導出Excel

C#導出Excel

表頭 title 會有 protect i++ tty 標題 fff result

    本教程可以實現在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