C#代码实现在PowerPoint中创建组合图表

 更新时间:2026年04月24日 11:54:19   作者:2501_93070778  
在 PowerPoint 中,组合图表是一种将两种或多种不同图表类型合并到同一图表中的图表形式,本文我们就来看看如何使用C#代码实现在PowerPoint中创建组合图表吧

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

环境准备

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

PM> Install-Package Spire.Presentation

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

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

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

示例代码如下:

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);
        }
    }
}

方法补充

要使用 C# 在 PowerPoint 中创建组合图表,目前最高效的方式是借助成熟的第三方库,它能在几行代码内完成从创建幻灯片、添加图表、填入数据到设置系列类型的全过程。

主流方案对比

在开始前,先简要了解下不同方案的优劣:

方案优点缺点适用场景
Spire.PresentationAPI 简洁,可直接修改系列图表类型,对组合图表支持极好。商业付费,免费版有限制(如水印)。需要快速、稳定实现功能,且项目有相应预算。
Aspose.Slides功能强大,接口设计良好,同样能创建组合图表。商业付费,学习曲线相对陡峭。对文档处理有广泛、复杂需求的企业级项目。
Open XML SDK官方免费,可完全控制底层 XML。复杂度极高,需要深入理解 Office 文档结构,开发效率低。对依赖项有严格限制、预算为零且愿意投入大量开发时间的场景。
Microsoft Office Interop直接操作 Office 应用程序,适合自动化。不推荐用于服务器端,稳定性差,有内存泄露风险。仅限有 Office 环境的客户端自动化脚本。

综合来看,对于组合图表这类复杂操作,使用商业库可以显著提升开发效率和项目稳定性。

方法一:使用 Spire.Presentation(推荐方案)

Spire.Presentation 是处理该需求最直观的库,核心思路是先创建一个基础图表(如柱状图),再修改特定系列的图表类型,生成组合效果

1. 安装 NuGet 包:在项目中安装 Spire.Presentation

2. 核心代码示例:以下示例演示了如何创建一份包含“销售额(柱状图)”和“增长率(折线图)”的月度销售报表组合图表。

说明:为了方便演示,下方合并了关键代码模块。实际使用时,可按需调整表格数据、图表尺寸和位置。

using Spire.Presentation;
using Spire.Presentation.Charts;
using System.Data;
using System.Drawing;
namespace SpireComboChartDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 创建PPT演示文稿实例[reference:8]
            using (Presentation presentation = new Presentation())
            {
                // 2. 在幻灯片上添加一个簇状柱状图(基础图表)[reference:9]
                RectangleF rect = new RectangleF(80, 120, 550, 320);
                IChart chart = presentation.Slides[0].Shapes.AppendChart(ChartType.ColumnClustered, rect);
                // 3. 设置图表标题[reference:10]
                chart.ChartTitle.TextProperties.Text = "月度销售与增长率分析";
                chart.ChartTitle.TextProperties.IsCentered = true;
                chart.HasTitle = true;
                // 4. 准备并填充图表数据[reference:11]
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("月份", typeof(string));
                dataTable.Columns.Add("销售额(万元)", typeof(int));
                dataTable.Columns.Add("增长率(%)", typeof(decimal));
                dataTable.Rows.Add("一月", 200, 0.6m);
                dataTable.Rows.Add("二月", 250, 0.8m);
                // ... 此处可继续添加三月至六月的示例数据 ...
                // 将数据表内容导入到图表(需自行实现数据导入逻辑,此处为示意)
                // chart.ChartData.ImportFromDataTable(dataTable, true, 1, 0);
                // 5. ☝️ 关键步骤:将第二个系列(“增长率”)的图表类型改为折线图[reference:12]
                chart.Series[1].Type = ChartType.Line;
                // 6. 将第二个系列绘制在次坐标轴上,便于对比不同量级的数据[reference:13]
                chart.Series[1].UseSecondAxis = true;
                // 7. 自定义坐标轴格式(可选),此处隐藏次坐标轴网格线,让图表更清爽[reference:14]
                chart.SecondaryValueAxis.MajorGridTextLines.FillType = FillFormatType.None;
                // 8. 保存演示文稿[reference:15]
                presentation.SaveToFile("ComboChartResult.pptx", FileFormat.Pptx2016);
            }
        }
    }
}

代码解析:关键操作在于第 5 步和第 6 步,通过修改 Series[1].Type 将数据系列的类型改为折线图,并使用 UseSecondAxis 将其关联到次坐标轴,从而生成一个兼具柱状图和折线图优势的组合视图。

方法二:使用 Aspose.Slides(备选方案)

Aspose.Slides 是另一款功能强大的专业库,同样支持创建组合图表。

1. 安装 NuGet 包:在项目中安装 Aspose.Slides.NET

2. 编写代码:基本思路与 Spire 类似,通常也是通过 AddChart 方法添加图表,然后访问 ChartData.Series 集合来设置不同系列的图表类型。

// 使用 Aspose.Slides 创建组合图表示例(代码结构示意)
using (Presentation pres = new Presentation())
{
    ISlide slide = pres.Slides[0];
    // 添加一个簇状柱状图作为基础
    IChart chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 600, 400);
    // 获取图表数据工作簿并添加数据...
    // 将第二个系列的类型修改为折线图
    chart.ChartData.Series[1].Type = ChartType.Line;
    // 将第二个系列绘制在次坐标轴上
    chart.ChartData.Series[1].PlotOnSecondAxis = true;
    pres.Save("output.pptx", SaveFormat.Pptx);
}

方案三:Open XML SDK(复杂,不推荐)

在开发效率方面,Open XML SDK 通常不是首选。它的实现极其复杂,你需要手动在底层组装 XML 元素,并确保正确建立图表部件与关联的内嵌 Excel 数据源之间的复杂引用关系。即使对于熟练的开发者,这一过程也容易出错。

如果你仍希望尝试,官方文档和 SDK 中的 DocumentReflector 工具是唯一可行的参考方法。

结语

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

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

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

相关文章

  • C#使用DirectX.DirectSound播放语音

    C#使用DirectX.DirectSound播放语音

    这篇文章主要为大家详细介绍了C#使用DirectX.DirectSound播放语音,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 基于C#实现音乐文件的播放功能

    基于C#实现音乐文件的播放功能

    本文介绍了如何使用C#编写一个简单的程序来实现音乐文件的播放功能,程序能够读取MP3文件和ogg文件,并通过合适的控件进行播放,同时,程序具备处理异常、良好的用户界面和兼容性的特点,感兴趣的朋友可以自己动手尝试一下
    2024-05-05
  • C#开源的AOP框架--KingAOP基础

    C#开源的AOP框架--KingAOP基础

    这篇文章主要介绍了一款C#开源的AOP框架--KingAOP框架的基础知识,对于想学习AOP的小伙伴来说,非常不错,希望大家能够喜欢。
    2015-12-12
  • 基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理

    基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理

    最近刚做完一个项目,项目架构师使用mvc5+ef6+Bootstrap,用的是vs2015,数据库是sql server2014。下面小编把mvc5+ef6+Bootstrap项目心得之身份验证和权限管理模块的实现思路分享给大家,需要的朋友可以参考下
    2016-06-06
  • c#多线程之间的排他锁的实现

    c#多线程之间的排他锁的实现

    我们很多时候会碰到这样的问题,使用多线程刷一个表的数据时需要多个线程不能重复提取数据,那么这个时候就需要使用到线程的排他锁了,本文就详细的介绍一下
    2021-08-08
  • C#无损压缩图片

    C#无损压缩图片

    本文主要介绍了C#无损压缩图片的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • c# Base64编码和图片的互相转换代码

    c# Base64编码和图片的互相转换代码

    Base64编码在Web方面有很多应用,譬如在URL、电子邮件方面。网上有很多相关的资源用于提供Base64编码和其他编码的转换,.Net Framework也提供了现成的功能类(System.Convert)用于将二进制数据转换为Base64字符串
    2014-08-08
  • C#生成Word文件(图片、文字)

    C#生成Word文件(图片、文字)

    这篇文章主要为大家详细介绍了C#生成Word文件,包括图片、文字等素材,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • C#中关于double.ToString()的用法

    C#中关于double.ToString()的用法

    这篇文章主要介绍了C#中关于double.ToString()的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#序列化成XML注意细节

    C#序列化成XML注意细节

    最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件,需要的朋友可以参考下
    2012-11-11

最新评论