当前位置: 代码网 > it编程>编程语言>Asp.net > C#代码实现在PowerPoint中创建组合图表

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

2026年04月24日 Asp.net 我要评论
在 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创建组合图表内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com