C#组件系列 你值得拥有的一款Excel处理神器Spire.XLS

2019-12-30 13:54:39王振洲

通过以上一段代码得到的Excel内容如下:

C#,组件,Excel,Spire.XLS

代码释疑:关于上面的代码不难,但还是想做些简单的说明。

首先填充表格数据,Spire.XLS读写数据表格使用的是sheet.Range[i, iCellcount++].Text这种方式。值得一提的是这里的行列索引都是从1开始的。Range除了提供行列索引的方式,还提供了Range["B1"].Text这种方式去读取值。

通过上文Excel生成图表原理我们知道,出了有数据表格,还得选中生成图表的区域,上述代码里面通过chart.DataRange = sheet.Range["A1:B6"];这一句去指定区域,和Excel里面的操作方式保持一致。

通过chart.ChartType = chartFormat;来指定需要生成的图表类型,Spire.XLS里面通过一个枚举类型包含了各种图表类型。

除了上面的这些,组件还支持指定图表在文档中的位置、图表坐标的最大值最小值。并且能够通过

 

复制代码 Spire.Xls.Charts.ChartSerie cs = chart.Series[0];cs.CategoryLabels = sheet.Range["A2:A6"];cs.Values = sheet.Range["B2:B6"];

 

这种方式去指定分类和值的区域,更加符合Excel的操作习惯。当然,如无特殊,这些完全可以不用指定。

2.3、对两项或者多项进行统计

上面只是一个最简单的例子,如果要对多列进行统计呢?我们继续来看这个例子,我们将代码改成这样:


[HttpPost]
    public JsonResult ExportData()
    {
      try
      {
        Workbook book = new Workbook();
        Worksheet sheet = book.Worksheets[0];
        var random = new Random();
        var iCellcount = 1;
        //1.设置表头
        sheet.Range[1, iCellcount++].Text = "部门名称";
        sheet.Range[1, iCellcount++].Text = "在职人数";
        sheet.Range[1, iCellcount++].Text = "离职人数";
        var lstDeptName = new List<string>() { "市场部", "策划部", "公关部", "行政部", "开发部" };
        var a = 0;
        //2.构造表数据
        for (var i = 2; i < 7; i++)
        {
          iCellcount = 1;
          sheet.Range[i, iCellcount++].Text = lstDeptName[a++];
          sheet.Range[i, iCellcount++].NumberValue = random.Next(1, 100);
          sheet.Range[i, iCellcount++].NumberValue = random.Next(1, 100); ;
        }
//3.生成图表
        SetChart(sheet, ExcelChartType.BarClustered);
        var strFullName = @"D:DataUpload" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
        book.SaveToFile(strFullName, ExcelVersion.Version2010);
      }
      catch (Exception ex){}
      return Json(true, JsonRequestBehavior.AllowGet);
    }

    private void SetChart(Worksheet sheet, ExcelChartType chartFormat)
    {
      //1.设置sheet页的名称
      sheet.Name = "Chart data";
      sheet.GridLinesVisible = false;

      Chart chart = sheet.Charts.Add();

      //2.指定生成图表的区域
      chart.DataRange = sheet.Range["A1:C6"];
      chart.SeriesDataFromRange = false;

      //3.指定图表的所在位置
      chart.LeftColumn = 5;
      chart.TopRow = 2;
      chart.RightColumn = 11;
      chart.BottomRow = 29;
      chart.ChartType = chartFormat;

      //4.设置图表的名称以及x、y轴的名称
      chart.ChartTitle = "部门信息";
      chart.ChartTitleArea.IsBold = true;
      chart.ChartTitleArea.Size = 12;

      chart.PrimaryCategoryAxis.Title = "部门";
      chart.PrimaryCategoryAxis.Font.IsBold = true;
      chart.PrimaryCategoryAxis.TitleArea.IsBold = true;

      chart.PrimaryValueAxis.Title = "人数";
      chart.PrimaryValueAxis.HasMajorGridLines = false;
      chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90;
      chart.PrimaryValueAxis.MinValue = 0;
      chart.PrimaryValueAxis.TitleArea.IsBold = true;

      //5.设置图表的值
      Spire.Xls.Charts.ChartSerie cs = chart.Series[0];
      cs.DataFormat.ShowActiveValue = true;
      cs.DataFormat.ShowBubble = true;
      chart.Legend.Position = LegendPositionType.Top;

    }