C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Excel创建仪表图

在C#中自动化创建Excel仪表图的操作代码

作者:缺点内向

在数据驱动的时代,Excel 仪表图(Gauge Chart)因其直观、高效的特点,成为业务监控和绩效评估的利器,本文我们将深入探讨如何利用 C# Excel Chart Automation 的强大能力,通过编程方式在 Excel 中自动化创建仪表图,彻底告别手动操作的烦恼,需要的朋友可以参考下

引言

在数据驱动的时代,Excel 仪表图(Gauge Chart)因其直观、高效的特点,成为业务监控和绩效评估的利器。它能一目了然地展示关键指标的完成度或所处区间,帮助我们快速洞察数据背后的含义。然而,手动在 Excel 中创建和更新仪表图,尤其是当数据源频繁变动或需要批量生成报表时,无疑是一项繁琐且效率低下的工作。这不仅耗费大量时间,还容易引入人为错误。

今天,我们将深入探讨如何利用 C# Excel Chart Automation 的强大能力,通过编程方式在 Excel 中自动化创建仪表图,彻底告别手动操作的烦恼。本文将为您提供实用的解决方案和具体的代码示例,帮助您轻松实现数据可视化报表的自动化生成。

为什么选择 C# 自动化创建 Excel 仪表图?

选择 C# 自动化创建 Excel 仪表图,不仅仅是为了“酷”,更是为了解决实际的业务痛点,带来显著的效率提升和价值。

例如,在项目进度跟踪中,可以自动化生成显示项目完成度百分比的仪表图;在销售绩效评估中,可以为每位销售人员创建目标达成率仪表图;在生产线监控中,可以实时展示设备利用率。Add Chart to Worksheet 的过程将变得极其高效和智能。

核心工具介绍:Spire.XLS 与 C# 实现原理

要在 C# 中高效地操作 Excel 文件,我们需要借助一个强大的 .NET Excel 库。在这里,我们以 Spire.XLS为例。

Spire.XLS 是一款功能全面、性能卓越的 .NET Excel 组件,它允许开发人员在 .NET 应用程序中创建、读取、写入和操作 Excel 文档,而无需安装 Microsoft Office。它对 Excel 图表的支持非常完善,包括我们今天要实现的仪表图。它能够模拟 Excel 的内置图表功能,通过编程接口,实现从数据准备、图表类型选择、数据系列设置到格式化等一系列操作。

实现原理简述:

  1. 加载/创建工作簿: 首先,我们需要创建一个新的 Excel 工作簿或加载一个现有工作簿。
  2. 选择工作表: 确定要在哪个工作表中创建图表。
  3. 准备数据: 仪表图的数据通常是简单的数值或百分比,需要将其写入工作表中的特定单元格区域。
  4. 添加图表对象: 在工作表中添加一个图表对象,并指定其位置和大小。
  5. 设置图表类型: Spire.XLS Create Gauge Chart 的核心在于,仪表图通常是通过组合饼图(或甜甜圈图)和散点图来模拟实现的。我们将利用 Spire.XLS 提供的 API 来配置这些图表类型。
  6. 配置数据系列: 将图表与工作表中的数据关联起来,设置每个数据系列的属性。
  7. 格式化: 对图表的标题、坐标轴、颜色、数据标签等进行精细化设置,使其符合可视化需求。
  8. 保存: 将修改后的工作簿保存到文件。

环境准备:

您可以通过 NuGet 包管理器轻松安装 Spire.XLS:

Install-Package Spire.XLS

手把手教学:在 C# 中创建 Excel 仪表图的实战步骤与代码

下面我们将通过一个具体的例子,展示如何使用 Spire.XLS 在 C# 中创建 Excel 仪表图。这里我们以一个简单的“进度仪表图”为例。

using Spire.Xls;
using Spire.Xls.Charts;
using System.Drawing; // 用于颜色设置

public class ExcelGaugeChartCreator
{
    public static void CreateGaugeChart(string filePath)
    {
        // 步骤1: 初始化工作簿与工作表
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.Worksheets[0];
        sheet.Name = "进度仪表图";

        // 步骤2: 准备仪表图数据
        // 仪表图通常由一个甜甜圈图和模拟指针的散点图(或另一个饼图)组成。
        // 这里我们准备甜甜圈图的数据:已完成部分、未完成部分、隐藏部分(用于形成半圆)
        // 假设进度为 75%
        double progress = 0.75;
        double completed = progress;
        double remaining = 1 - progress;
        double hiddenPart = 1.0; // 用于甜甜圈图的半圆效果 (100%)

        sheet.Range["A1"].Value2 = completed; // 已完成
        sheet.Range["A2"].Value2 = remaining; // 未完成
        sheet.Range["A3"].Value2 = hiddenPart; // 隐藏部分

        // 散点图的指针数据 (中心点和指针终点)
        // 计算指针在圆上的X, Y坐标
        // 角度从 -90度到 90度 (对应半圆)
        // progress = 0 -> 角度 -90度; progress = 1 -> 角度 90度
        double angleRad = (progress * 180 - 90) * Math.PI / 180.0;
        double pointerX = Math.Cos(angleRad);
        double pointerY = Math.Sin(angleRad);

        sheet.Range["B1"].Value2 = 0; // 指针起点 X
        sheet.Range["C1"].Value2 = 0; // 指针起点 Y
        sheet.Range["B2"].Value2 = pointerX; // 指针终点 X
        sheet.Range["C2"].Value2 = pointerY; // 指针终点 Y
        sheet.Range["B3"].Value2 = 0; // 用于散点图的辅助数据
        sheet.Range["C3"].Value2 = 0;

        // 步骤3: 添加图表并指定类型 (甜甜圈图作为基础)
        Chart chart = sheet.Charts.Add(ExcelChartType.Doughnut);
        chart.LeftColumn = 2;
        chart.TopRow = 5;
        chart.RightColumn = 10;
        chart.BottomRow = 25;

        // 步骤4: 配置甜甜圈图数据源与系列
        chart.DataRange = sheet.Range["A1:A3"];
        chart.SeriesDataFromRange = false; // 表示数据来自单个区域,而不是按行或列系列

        // 获取第一个系列 (甜甜圈图系列)
        ChartSerie doughnutSeries = chart.Series[0];
        doughnutSeries.Values = sheet.Range["A1:A3"]; // 绑定数据
        doughnutSeries.Format.Options.DoughnutHoleSize = 65; // 设置甜甜圈孔径
        doughnutSeries.DataFormat.Options.FirstSliceAngle = 270; // 旋转,使半圆底部平直

        // 格式化甜甜圈图的各个扇区
        doughnutSeries.DataPoints[0].DataFormat.Fill.ForeColor = Color.Green; // 已完成部分
        doughnutSeries.DataPoints[1].DataFormat.Fill.ForeColor = Color.LightGray; // 未完成部分
        doughnutSeries.DataPoints[2].DataFormat.Fill.Visible = false; // 隐藏第三部分

        // 移除甜甜圈图的边框
        doughnutSeries.DataPoints[0].DataFormat.Line.FillType = FillFormatType.None;
        doughnutSeries.DataPoints[1].DataFormat.Line.FillType = FillFormatType.None;
        doughnutSeries.DataPoints[2].DataFormat.Line.FillType = FillFormatType.None;

        // 步骤5: 添加散点图系列作为指针
        ChartSerie pointerSeries = chart.Series.Add(sheet.Range["B1:C2"]); // 添加散点图系列
        pointerSeries.SeriesType = ExcelChartType.ScatterMarkers; // 设置为带标记的散点图
        pointerSeries.XValues = sheet.Range["B1:B2"]; // 指针的X坐标
        pointerSeries.Values = sheet.Range["C1:C2"]; // 指针的Y坐标

        // 格式化指针
        pointerSeries.DataPoints[0].DataFormat.Fill.Visible = false; // 隐藏起点标记
        pointerSeries.DataPoints[1].DataFormat.Marker.Size = 10; // 设置指针终点标记大小
        pointerSeries.DataPoints[1].DataFormat.Marker.MarkerStyle = ChartMarkerType.Triangle; // 设置指针形状
        pointerSeries.DataPoints[1].DataFormat.Marker.MarkerForegroundColor = Color.Red; // 指针颜色
        pointerSeries.DataPoints[1].DataFormat.Marker.MarkerBackgroundColor = Color.Red;
        pointerSeries.DataPoints[1].DataFormat.Line.FillType = FillFormatType.Solid; // 指针线
        pointerSeries.DataPoints[1].DataFormat.Line.Color = Color.Red;
        pointerSeries.DataPoints[1].DataFormat.Line.Weight = 2;

        // 移除散点图的线条和标记
        pointerSeries.Format.Line.FillType = FillFormatType.None;
        pointerSeries.DataPoints[0].DataFormat.Line.FillType = FillFormatType.None;
        pointerSeries.DataPoints[1].DataFormat.Line.FillType = FillFormatType.None;

        // 步骤6: 格式化仪表图 (标题、图例、坐标轴等)
        chart.ChartTitle.Text = $"项目进度: {progress:P0}"; // 设置标题
        chart.ChartTitleArea.IsBold = true;
        chart.ChartTitleArea.Size = 14;

        chart.HasLegend = false; // 隐藏图例

        // 隐藏主X轴和Y轴
        chart.PrimaryCategoryAxis.Visible = false;
        chart.PrimaryValueAxis.Visible = false;

        // 移除图表区域的边框和背景
        chart.ChartArea.Border.LineProperties.FillType = FillFormatType.None;
        chart.ChartArea.Interior.FillType = FillFormatType.None;

        // 移除绘图区域的边框和背景
        chart.PlotArea.Border.LineProperties.FillType = FillFormatType.None;
        chart.PlotArea.Interior.FillType = FillFormatType.None;

        // 步骤7: 保存 Excel 文件
        workbook.SaveToFile(filePath, ExcelVersion.Version2016);
        workbook.Dispose();
        Console.WriteLine($"仪表图已成功创建并保存到: {filePath}");
    }
}

代码解释:

通过上述代码,您就能在 C# 中实现一个基本的 Excel 仪表图自动化创建。可以根据实际需求调整数据、颜色和样式。

到此这篇关于在C#中自动化创建Excel仪表图的操作代码的文章就介绍到这了,更多相关C# Excel创建仪表图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文