前言

之前说了导入和导出,也提供了自定义的表模的导入,可见LinqToExcel可以做的事情不仅仅如此

这次我们来演示比较复杂的导出Excel,导出复杂的Excel与导入复杂的Excel原理基本是一样的!

所以本节来演示如何使用ClosedXML来导入复杂的Excel

 一起来看一个例子

注:信息量偏少,但是原理是一样的,你再复杂的Excel表都只是那几个操作方式。

分析

从图中可以看出有几个知识点:

  • 1.创建作业本
  • 2.添加工作簿(信息表,可以同时导出多个sheet)
  • 3.添加标题(合并列)
  • 4.填充数据(制定填充或者列表填充,列表填充参考简单导出一节)
  • 5.格式化数据(格式化销售额为美元)
  • 6.计算平均值(销售额平均值)

看起来很困难,但是ClosedXML都帮我们做好了,具体如下:

  • 1.对指定单元格进行和并
  • 2.格式化化数据(可以格式化日期,数字,自定义格式应有尽有,非常方便)
  • 3.计算(可以对范围的值进行求和,求平均,求条数,求最大小值等等,异常方便)
  • 4.设置Excel的各种样式(边框,单元格颜色,宽度等等)

说到底:ClosedXML能输出你任何想定制的格式给客户《客户看了都说好》

实现方式

1.创建作业本

var wb = new XLWorkbook();

2.添加工作簿(信息表,可以同时导出多个sheet)

 var ws = wb.Worksheets.Add("信息表");

3.添加标题

 ws.Cell("B2").Value = "联系人信息表";

4.填充数据

   //姓名
            ws.Cell("B3").Value = "姓名";
            ws.Cell("B4").Value = "牛掰掰";
            ws.Cell("B5").Value = "很多岁";
            ws.Cell("B6").SetValue("光头强");  //另一种值得设置方式

            //性别
            ws.Cell("C3").Value = "性别";
            ws.Cell("C4").Value = "";
            ws.Cell("C5").Value = "";
            ws.Cell("C6").SetValue("未知"); 

            // 年龄
            ws.Cell("D3").Value = "年龄";
            ws.Cell("D4").Value = 13;
            ws.Cell("D5").Value = 88;
            ws.Cell("D6").SetValue(46);

            //电话
            ws.Cell("E3").Value = "电话";
            ws.Cell("E4").Value = "10000";
            ws.Cell("E5").Value = "10086";
            ws.Cell("E6").SetValue("10010"); 

            //金额
            ws.Cell("F3").Value = "本季度销售业绩";
            ws.Cell("F4").Value = "6892651";
            ws.Cell("F5").Value = "698000";
            ws.Cell("F6").SetValue("9653445"); 

5.合并标题的列

 var rngTable = ws.Range("B2:F6");

6.格式化数据

 var rngNumbers = rngTable.Range("E3:E5");
 rngNumbers.Style.NumberFormat.Format = "$ #,##0";

取得销售额一列,并进行格式化,前面加个$的符号和,其他格式,参考官方文档

7.输出表格到Excel的位置

var rngData = ws.Range("B3:F6");
var excelTable = rngData.CreateTable();

注意:这是要输出出到Excel中的位置

8.调整内容的宽度

ws.Columns().AdjustToContents(); 

9.保存Excel表(或者直接用流的方式输出给用户下载)

wb.SaveAs("ExcelSample.xlsx");

  var wb = new XLWorkbook();
            var ws = wb.Worksheets.Add("信息表");
            ws.Cell("B2").Value = "联系人信息表";
            //姓名
            ws.Cell("B3").Value = "姓名";
            ws.Cell("B4").Value = "牛掰掰";
            ws.Cell("B5").Value = "很多岁";
            ws.Cell("B6").SetValue("光头强");  //另一种值得设置方式
            //性别
            ws.Cell("C3").Value = "性别";
            ws.Cell("C4").Value = "";
            ws.Cell("C5").Value = "";
            ws.Cell("C6").SetValue("未知"); 
            // 年龄
            ws.Cell("D3").Value = "年龄";
            ws.Cell("D4").Value = 13;
            ws.Cell("D5").Value = 88;
            ws.Cell("D6").SetValue(46);
            //电话
            ws.Cell("E3").Value = "电话";
            ws.Cell("E4").Value = "10000";
            ws.Cell("E5").Value = "10086";
            ws.Cell("E6").SetValue("10010"); 

            //金额
            ws.Cell("F3").Value = "本季度销售业绩";
            ws.Cell("F4").Value = "6892651";
            ws.Cell("F5").Value = "698000";
            ws.Cell("F6").SetValue("9653445"); 
            var rngTable = ws.Range("B2:F6");

            var rngDates = rngTable.Range("D3:D5"); 
            var rngNumbers = rngTable.Range("E3:E5");

            rngNumbers.Style.NumberFormat.Format = "$ #,##0";
            rngTable.FirstCell().Style
                .Font.SetBold()
                .Fill.SetBackgroundColor(XLColor.AppleGreen)
                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
            rngTable.FirstRow().Merge(); 

          
        
            var rngHeaders = rngTable.Range("A2:E2"); 
            rngHeaders.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            rngHeaders.Style.Font.Bold = true;
            rngHeaders.Style.Font.FontColor = XLColor.DarkBlue;
            rngHeaders.Style.Fill.BackgroundColor = XLColor.Aqua;
            var rngData = ws.Range("B3:F6");
            var excelTable = rngData.CreateTable();

          
            excelTable.ShowTotalsRow = true;
          
            excelTable.Field("本季度销售业绩").TotalsRowFunction = XLTotalsRowFunction.Average;
          
            excelTable.Field("电话").TotalsRowLabel = "平均值:";
         
            ws.RangeUsed().Style.Border.OutsideBorder = XLBorderStyleValues.Thick;


            ws.FirstColumn().Style.Border.LeftBorder = XLBorderStyleValues.Thick;
            ws.LastColumn().Style.Border.RightBorder = XLBorderStyleValues.Thick;
            ws.FirstRow().Style.Border.TopBorder = XLBorderStyleValues.Thick;
            ws.LastRow().Style.Border.BottomBorder = XLBorderStyleValues.Thick;

完整代码

效果如图:

 

 

总结

基本上所有场景都在代码展示,再复杂的导出我们应该都能拼凑出来!有问题我们留言探讨一下

下载代码:动起手来,稳固知识

链接:http://pan.baidu.com/s/1pL30drd 密码:1yrc

—————————————————

参考代码:https://github.com/closedxml/closedxml

 

版权声明:本文为ymnets原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/ymnets/p/7885402.html