使用C#代码在 PowerPoint 中创建组合图表

在 PowerPoint 中,组合图表是一种将两种或多种不同图表类型合并到同一图表中的图表形式。它可以在一个图表中展示多组数据,使不同变量之间的对比和分析更加直观。在本文中,你将学习如何通过编程方式在 PowerPoint 演示文稿中创建组合图表。

环境准备

在开始之前,你需要在 .NET 项目中添加相关组件作为引用。这些组件可以通过下载安装包获取,也可以通过 NuGet 进行安装。

cs 复制代码
PM> Install-Package Spire.Presentation

在 C# 和 VB.NET 中创建 PowerPoint 组合图表

在 PowerPoint 中,可以先向幻灯片中添加一种基础图表类型,然后将其中某个数据系列更改为另一种图表类型,从而实现组合图表的效果。下面是将柱形图与折线图组合的基本步骤:

  1. 创建一个 Presentation 实例。
  2. 获取指定的幻灯片,并向其中添加一个柱形图。
  3. 创建一个 DataTable 对象并填充数据,然后将数据导入到图表中。
  4. 设置图表标题、分类标签、系列名称以及系列数据。
  5. 将第二个数据系列的图表类型修改为带数据标记的折线图。
  6. 将第二个数据系列设置为使用次坐标轴进行绘制。
  7. 设置次坐标轴的数字格式和网格线样式。
  8. 保存生成的演示文稿。

示例代码如下:

cs 复制代码
using Spire.Presentation;
using Spire.Presentation.Charts;
using Spire.Presentation.Drawing;
using System;
using System.Data;
using System.Drawing;

namespace CombinationChart
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Presentation 实例
            Presentation presentation = new Presentation();

            // 在第一张幻灯片中添加一个簇状柱形图
            RectangleF rect = new RectangleF(80, 120, 550, 320);
            IChart chart = presentation.Slides[0].Shapes.AppendChart(ChartType.ColumnClustered, rect);

            // 设置并格式化图表标题
            chart.ChartTitle.TextProperties.Text = "Monthly Sales Report"; // 月度销售报告
            chart.ChartTitle.TextProperties.IsCentered = true;
            chart.ChartTitle.Height = 30;
            chart.HasTitle = true;

            // 创建一个 DataTable 并添加数据
            DataTable dataTable = new DataTable();
            dataTable.Columns.Add(new DataColumn("Month", Type.GetType("System.String"))); // 月份
            dataTable.Columns.Add(new DataColumn("Sales", Type.GetType("System.Int32"))); // 销售额
            dataTable.Columns.Add(new DataColumn("Growth rate", Type.GetType("System.Decimal"))); // 增长率
            dataTable.Rows.Add("January", 200, 0.6);
            dataTable.Rows.Add("February", 250, 0.8);
            dataTable.Rows.Add("March", 300, 0.6);
            dataTable.Rows.Add("April", 150, 0.2);
            dataTable.Rows.Add("May", 200, 0.5);
            dataTable.Rows.Add("June", 400, 0.9);

            // 将 DataTable 中的数据导入到图表
            for (int c = 0; c < dataTable.Columns.Count; c++)
            {
                chart.ChartData[0, c].Text = dataTable.Columns[c].Caption;
            }
            for (int r = 0; r < dataTable.Rows.Count; r++)
            {
                object[] datas = dataTable.Rows[r].ItemArray;
                for (int c = 0; c < datas.Length; c++)
                {
                    chart.ChartData[r + 1, c].Value = datas[c];
                }
            }

            // 设置系列标签
            chart.Series.SeriesLabel = chart.ChartData["B1", "C1"];

            // 设置分类标签    
            chart.Categories.CategoryLabels = chart.ChartData["A2", "A7"];

            // 为系列赋值
            chart.Series[0].Values = chart.ChartData["B2", "B7"];
            chart.Series[1].Values = chart.ChartData["C2", "C7"];

            // 将第二个系列的图表类型改为带数据标记的折线图
            chart.Series[1].Type = ChartType.LineMarkers;

            // 将第二个系列绘制在次坐标轴上
            chart.Series[1].UseSecondAxis = true;

            // 设置次坐标轴的数字格式
            chart.SecondaryValueAxis.NumberFormat = "0%";

            // 隐藏次坐标轴的网格线
            chart.SecondaryValueAxis.MajorGridTextLines.FillType = FillFormatType.None;

            // 设置图例位置
            chart.ChartLegend.Position = ChartLegendPositionType.Top;

            // 设置柱形图重叠比例
            chart.OverLap = -50;

            // 设置柱间距
            chart.GapWidth = 200;

            // 保存结果文档
            presentation.SaveToFile("CombinationChart.pptx", FileFormat.Pptx2010);
        }
    }
}

结语

总的来说,组合图表是一种非常实用的数据可视化方式,能够在同一图表中同时展示不同类型的数据,从而提升信息表达的清晰度和对比效果。通过本文的示例,可以看到,在 PowerPoint 中实现柱形图与折线图的组合并不复杂:核心思路是先创建基础图表,再对特定数据系列调整图表类型,并结合次坐标轴来呈现不同量级的数据。

整个过程涵盖了数据准备、图表配置以及样式优化等关键步骤,不仅可以满足基础的数据展示需求,还能通过标题、图例、坐标轴等细节设置提升图表的可读性和专业度。掌握这种方法后,你可以根据实际业务场景灵活扩展,构建更符合需求的数据可视化效果。

相关推荐
点心的游戏开发世界1 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
2601_962071572 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
淡海水3 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
点心的游戏开发世界3 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
CS_Zero4 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-5 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设7 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e7 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
公子小六7 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
问天_观心7 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github