C#导出Excel

2021-06-19 10:09

阅读:381

标签:引用   entity   new   解释   根据   现在   fir   pre   name   

    本教程可以实现在C#中导出Excel表格,并且设置Excel多级表头的情况。

    简单来说,是在MemoryStream中进行的操作。

    只提供一部分实现代码,具体需要的api或者方法请自行百度。


 

     

 1 //引用
 2 
 3      using Aspose.Cells;
 4 
 5   protected MemoryStream ConvertToStream_Report(List 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 )
 2 
 3     {
 4 
 5       for(int j = 0; 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

标签:引用   entity   new   解释   根据   现在   fir   pre   name   

原文地址:https://www.cnblogs.com/XYYCKL/p/10282782.html


评论


亲,登录后才可以留言!