zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    IOS UITableView 加载图片 卡的问题
    泛型
    正则表达式
    CSS 实现圆角表格
    CSS 横向滚动广告
    WebService
    CSS 弹出层 支持IE/FF/OP
    XML2DT DT2XML
    HttpWebRequest 调用 WebService 返回 xml
    CSS 自由伸展的三栏式版面
  • 原文地址:https://www.cnblogs.com/XYYCKL/p/10282782.html
Copyright © 2011-2022 走看看