• 用MyXls生成Excel报表(C#)总结


    总结了一下MyXls导出Excle,分页之后导出全部数据。当然还有一些简单的方法。但是功能就局限了。

    一:(网上搜集)

    MyXLS 是一个快速和简单的读写 Excel 文件的 .NET 组件,可用在 ASP.NET 网站和 .NET 应用程序中,无需安装 Excel 程序,支持 Excel 97 以及以后的版本。

           目前MyXls已经实现了单元格(cell)的格式设置,包括文本颜色、文本大小、字体、单位格边框、底色、列宽、行高,合并单元格,多个sheet页等功能。以下是MyXLS组件的一些用法:

    1.创建一个Excel文档:

    XlsDocument xls =new XlsDocument();

    2.创建一个WorkSheet:

    Worksheet ws = xls.Workbook.Worksheets.Add("WorkSheet1");

    3.指定列格式:

    ColumnInfo colInfo =new ColumnInfo(xls, ws);

    colInfo.ColumnIndexStart =;

    colInfo.ColumnIndexEnd =17;

    colInfo.Width =15*256;

    ws.AddColumnInfo(colInfo);

    列格式必须每次都要重新定义,一个列格式不能重复使用。

    4.指定单元格样式:

    XF xf = xls.NewXF();

    xf.HorizontalAlignment = HorizontalAlignments.Centered;

    xf.VerticalAlignment = VerticalAlignments.Centered;

    xf.Pattern =1;

    xf.PatternColor = Colors.Default30;

    xf.UseBorder =true;

    xf.TopLineStyle =1;

    xf.TopLineColor = Colors.Black;

    xf.BottomLineStyle =1;

    xf.BottomLineColor = Colors.Black; xf.LeftLineStyle =1;

    xf.LeftLineColor = Colors.Black;

    xf.RightLineStyle =1;

    xf.RightLineColor = Colors.Black;

    xf.Font.Bold =true;

    xf.Font.Height =11*20;

    xf.Font.ColorIndex =1;

    5.给单元格赋值:

    ws.Cells.Add(2, 3, "金额(万元)", xf);

    6.合并单元格:

    ws.Cells.Merge(1, 2, 2, 2); //或者ws.AddMergeArea(new MergeArea(1, 2, 1, 1));

    7.MyXls合并单元格有个bug,就是合并后只是第一个单元格有样式,其余的样式丢失。所以写了个函数来合并:

    MergeRegion(ref ws, xf, "机构", 1, 1, 2, 1);

    publicvoid MergeRegion(ref Worksheet ws, XF xf, string title, int startRow, int startCol, int endRow, int endCol)

    {     

      for (int i = startCol; i <= endCol; i++)  

          {    

             for (int j = startRow; j <= endRow; j++)  

                {            

              ws.Cells.Add(j, i, title, xf);  

                }    

        }      

      ws.Cells.Merge(startRow, endRow, startCol, endCol); }

    虽然效率不怎么样,但是对于出Excel报表,还OK。

    8.指定单元格格式

    cell.Format = StandardFormats.Decimal_1;

    具体更多请参考源代码的StandardFormats类。

    9.保存或者发送Excel:

    xls.Send(); //或者xls.Save();

    二、结合项目

    实例:

    View Code
      1         protected void btnExcel_Click(object sender, EventArgs e)
      2         {
      3             DataTable dt = (DataTable)ViewState["dt"];
      4             string item = "客户:" + name + "" + start + "" + end + " 采购详单";
      5             ExcelExport(dt, item);
      6         }
      7         //先添加引用给出的DLL文件
      8         private void ExcelExport(DataTable dt, string item)
      9         {
     10 
     11             XlsDocument xls = new XlsDocument();
     12             xls.FileName = "采购详单.xls";//指定文件名
     13 
     14             Worksheet sheet = xls.Workbook.Worksheets.Add("Inventory");
     15 
     16             #region 设置各数据列的大小
     17             ColumnInfo colInfo = null;
     18             int a = 0;
     19             int b = 0;
     20             //15列
     21             for (int i = 0; i < 15; i++)
     22             {
     23                 a = i == 0 ? 0 : (i + 1);
     24                 b = i == 0 ? 1 : (i + 1);
     25                 colInfo = new ColumnInfo(xls, sheet);
     26                 colInfo.ColumnIndexStart = (ushort)a;
     27                 colInfo.ColumnIndexEnd = (ushort)b;
     28                 colInfo.Width = 13 * 256;
     29                 sheet.AddColumnInfo(colInfo);
     30             }
     31             #endregion
     32 
     33             Cells cells = sheet.Cells;
     34 
     35             #region 合并单元格,得到报表标题
     36             //第一行标题
     37             MergeArea maTitle = new MergeArea(1, 2, 1, 15);
     38             sheet.AddMergeArea(maTitle);
     39             XF xfTitle = xls.NewXF();
     40             xfTitle.HorizontalAlignment = HorizontalAlignments.Centered;
     41             xfTitle.VerticalAlignment = VerticalAlignments.Centered;
     42             xfTitle.Font.FontName = "宋体";
     43             xfTitle.Font.Height = 16 * 20;
     44             xfTitle.Font.Bold = true;
     45             cells.Add(1, 1, "采购订单明细", xfTitle);
     46             #endregion
     47 
     48             //第二行描述
     49             MergeArea maTime1 = new MergeArea(3, 3, 1, 15);
     50             sheet.AddMergeArea(maTime1);
     51             XF xfTopBar = xls.NewXF();
     52             xfTopBar.Font.FontName = "宋体";
     53             //item为描述内容
     54             cells.Add(3, 1, item, xfTopBar);
     55 
     56             #region 设置Excel数据列标题的格式
     57             XF xfDataHead = xls.NewXF();
     58             xfDataHead.HorizontalAlignment = HorizontalAlignments.Centered;
     59             xfDataHead.VerticalAlignment = VerticalAlignments.Centered;
     60             xfDataHead.Font.FontName = "宋体";
     61             xfDataHead.Font.Bold = true;
     62             xfDataHead.UseBorder = true;
     63             xfDataHead.BottomLineStyle = 1;
     64             xfDataHead.BottomLineColor = Colors.Black;
     65             xfDataHead.TopLineStyle = 1;
     66             xfDataHead.TopLineColor = Colors.Black;
     67             xfDataHead.LeftLineStyle = 1;
     68             xfDataHead.LeftLineColor = Colors.Black;
     69             xfDataHead.RightLineStyle = 1;
     70             xfDataHead.RightLineColor = Colors.Black;
     71             #endregion
     72 
     73             #region 添加列标题
     74             cells.Add(4, 1, "单据号", xfDataHead);
     75             cells.Add(4, 2, "产品名称", xfDataHead);
     76             cells.Add(4, 3, "规格", xfDataHead);
     77             cells.Add(4, 4, "厚度", xfDataHead);
     78             cells.Add(4, 5, "等级", xfDataHead);
     79             cells.Add(4, 6, "单位", xfDataHead);
     80             cells.Add(4, 7, "数量", xfDataHead);
     81             cells.Add(4, 8, "过度", xfDataHead);
     82             cells.Add(4, 9, "包装", xfDataHead);
     83             cells.Add(4, 10, "销售区域", xfDataHead);
     84             cells.Add(4, 11, "颜色", xfDataHead);
     85             cells.Add(4, 12, "单位代码", xfDataHead);
     86             cells.Add(4, 13, "包装代码", xfDataHead);
     87             cells.Add(4, 14, "单价", xfDataHead);
     88             cells.Add(4, 15, "单价", xfDataHead);
     89             #endregion
     90 
     91             #region 设置各数据列的格式
     92 
     93             XF xfData = xls.NewXF();
     94             xfData.Font.FontName = "宋体";
     95             xfData.UseBorder = true;
     96             xfData.BottomLineStyle = 1;
     97             xfData.BottomLineColor = Colors.Black;
     98             xfData.TopLineStyle = 1;
     99             xfData.TopLineColor = Colors.Black;
    100             xfData.LeftLineStyle = 1;
    101             xfData.LeftLineColor = Colors.Black;
    102             xfData.RightLineStyle = 1;
    103             xfData.RightLineColor = Colors.Black;
    104             #endregion
    105 
    106             #region 填充数据
    107 
    108             int j = 5;//从第五行开始为数据行
    109 
    110             double provideTotal = 0;
    111 
    112             double useTotal = 0;
    113 
    114             double lossTotal = 0;
    115 
    116             foreach (DataRow dr in dt.Rows)
    117             {
    118 
    119                 cells.Add(j, 1, dr["djno"], xfData);
    120                 cells.Add(j, 2, dr["itemname"], xfData);
    121                 cells.Add(j, 3, dr["specs"], xfData);
    122                 cells.Add(j, 4, dr["ply"], xfData);
    123                 cells.Add(j, 5, dr["rank"], xfData);
    124                 cells.Add(j, 6, dr["ut"], xfData);
    125                 cells.Add(j, 7, dr["num"], xfData);
    126                 cells.Add(j, 8, dr["transcolor"], xfData);
    127                 cells.Add(j, 9, dr["packname"], xfData);
    128                 cells.Add(j, 10, dr["salesarea"], xfData);
    129                 cells.Add(j, 11, dr["color"], xfData);
    130                 cells.Add(j, 12, dr["utno"], xfData);
    131                 cells.Add(j, 13, dr["packno"], xfData);
    132                 cells.Add(j, 14, dr["zkprice"], xfData);
    133                 cells.Add(j, 15, dr["zkamt"], xfData);
    134                 j++;
    135 
    136             }
    137             #endregion
    138             string path = Server.MapPath("~/");
    139             xls.Save(path + "\\excel\\", true);
    140             string down = Server.MapPath("~/") + "\\excel\\" + xls.FileName;
    141             FileInfo DownloadFile = new FileInfo(down);
    142             Response.Clear();
    143             Response.ClearHeaders();
    144             Response.Buffer = false;
    145             Response.ContentType = "application/octet-stream";
    146             Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(xls.FileName, System.Text.Encoding.UTF8));
    147             Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
    148             Response.WriteFile(DownloadFile.FullName);
    149             Response.Flush();
    150             Response.End();
    151             //xls.Send();
    152         }

    效果图下载:效果

    下载:org.in2bits.MyXls

  • 相关阅读:
    30、Java中Set集合之HashSet、TreeSet和EnumSet
    此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。
    C# 关闭显示器(显示)
    29、java中阻塞队列
    28、队列和栈
    27、ArrayList和LinkedList的区别
    26、线性表(List)
    WMI使用的WIN32_类库名
    android 怎样加速./mk snod打包
    hdu1081 最大子矩阵
  • 原文地址:https://www.cnblogs.com/rocblog/p/3045071.html
Copyright © 2020-2023  润新知