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

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

为了解决这种问题,组件为我们提供了如下方法:


[HttpPost]
    public JsonResult UploadFile()
    {
      var strRes = string.Empty;
      var oFile = Request.Files["txt_file"];

      Workbook book = new Workbook();
      book.LoadFromStream(oFile.InputStream);
      var strFullName = @"D:DataUpload" + "First" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
      PdfDocument pdfDocument = new PdfDocument();
      pdfDocument.PageSettings.Orientation = PdfPageOrientation.Landscape;
      pdfDocument.PageSettings.Width = 1800;//指定PDF的宽度
      pdfDocument.PageSettings.Height = 1000;//指定PDF的高度

      PdfConverterSettings settings = new PdfConverterSettings();
      settings.TemplateDocument = pdfDocument;

      PdfConverter pdfConverter = new PdfConverter(book);
      pdfDocument = pdfConverter.Convert(settings);
      pdfDocument.SaveToFile(strFullName);
      return Json(new object { }, JsonRequestBehavior.AllowGet);
    }

这样就可以正常了,如果你的Excel列更多,可以适当调整宽度和高度。得到的结果如下

C#,组件,Excel,Spire.XLS

还有更多强大的功能大家有兴趣可以慢慢探索,官方文档写得还算详细。

2.4、Excel转其他类型

除了转为PDF,Spire.XLS还支持转换为其他类型,比如常见的xml、Image、Html等。如果大家有这方面的需求,可以深究一下。

2、Excel生成图表

2.1、Excel图表生成原理分析

通过下面一张图先来看看Excel里面生成图表的原理

C#,组件,Excel,Spire.XLS

通过这张图我们可以看到,Excel生成图表首先需要当前文档里面存在数据表格,然后选中相应的数据表格,最后选择生成的图表类型,Excel应用会自动帮你生成相应的数据图表。

2.2、Spire.XLS生成简单图表

知道了上面Excel生成图表的原理,我们再来看看Spire.XLS组件如何帮助我们解决生成图表的问题。关于生成图表,Spire.XLS组件提供了很多的选择,覆盖了Excel里面各种自带的图表类型、统计方法等。下面先来看一个简单点的例子。

 


[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 = "部门人数";
        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); ;
        }
          //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:B6"];
      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.CategoryLabels = sheet.Range["A2:A6"];
      cs.Values = sheet.Range["B2:B6"];
      cs.DataFormat.ShowActiveValue = true;
      chart.Legend.Position = LegendPositionType.Top;
    }