You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GemBox Presentation在C#中创建PPT饼图报错求助

使用GemBox在PPT中创建饼图时的ExcelChart.Worksheet错误解决

问题说明

在C#项目中使用GemBox创建包含饼图的PPT,因官方无饼图示例,参考柱状图示例编写代码后出现错误,错误信息翻译如下:

ExcelChart 未包含 Worksheet 的定义,也找不到接受 ExcelChart 类型第一个参数的可访问扩展方法 Worksheet(你是否缺少 using 指令或程序集引用?)

原错误代码

using GemBox.Presentation;
using spreedsheetCharts =  GemBox.Spreadsheet.Charts;
using spreedsheet =  GemBox.Spreadsheet;

// Add new PowerPoint presentation slide.
// If using the Professional version, put your GemBox.Presentation serial key below.
ComponentInfo.SetLicense("FREE-LIMITED-KEY");

// If using the Professional version, put your GemBox.Spreadsheet serial key below.
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");

var firstLastSlidesPresentation= new PresentationDocument();

var slide = firstLastSlidesPresentation.Slides.AddNew(SlideLayoutType.Custom);

// Add simple PowerPoint presentation title.
var textBox = slide.Content.AddTextBox(ShapeGeometryType.Rectangle,
    116.8, 20, 105, 10, GemBox.Presentation.LengthUnit.Millimeter);

textBox.AddParagraph().AddRun("New presentation with chart element.");

// Create PowerPoint chart and add it to slide.
var chart = slide.Content.AddChart(GemBox.Presentation.ChartType.Bar,
    49.3, 40, 240, 120, GemBox.Presentation.LengthUnit.Millimeter);

// Get underlying Excel chart.
spreedsheetCharts.ExcelChart excelChart = (spreedsheetCharts.ExcelChart)chart.ExcelChart;
spreedsheet.ExcelWorksheet worksheet = excelChart.Worksheet;

// Add data for Excel chart.
worksheet.Cells["A1"].Value = "Name";
worksheet.Cells["A2"].Value = "John Doe";
worksheet.Cells["A3"].Value = "Fred Nurk";
worksheet.Cells["A4"].Value = "Hans Meier";
worksheet.Cells["A5"].Value = "Ivan Horvat";

worksheet.Cells["B1"].Value = "Salary";
worksheet.Cells["B2"].Value = 3600;
worksheet.Cells["B3"].Value = 2580;
worksheet.Cells["B4"].Value = 3200;
worksheet.Cells["B5"].Value = 4100;

// Select data.
excelChart.SelectData(worksheet.Cells.GetSubrange("A1:B5"), true);

firstLastSlidesPresentation.save("somename.pptx")

错误原因及解决步骤

  1. 类型转换错误:chart.ExcelChart 返回的是 GemBox.Spreadsheet.Charts.Chart 类型,而非 ExcelChart,错误的类型转换导致无法访问 Worksheet 属性。
  2. 图表类型未切换:原代码创建的是柱状图,需改为饼图类型。
  3. 方法名大小写错误:C#是大小写敏感语言,save 需改为 Save。

修正后的完整代码

using GemBox.Presentation;
using spreadsheetCharts = GemBox.Spreadsheet.Charts;
using spreadsheet = GemBox.Spreadsheet;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");

var presentation = new PresentationDocument();
var slide = presentation.Slides.AddNew(SlideLayoutType.Custom);

// 添加标题
var textBox = slide.Content.AddTextBox(ShapeGeometryType.Rectangle,
    116.8, 20, 105, 10, LengthUnit.Millimeter);
textBox.AddParagraph().AddRun("带饼图的演示文稿");

// 创建饼图并添加到幻灯片
var chart = slide.Content.AddChart(ChartType.Pie,
    49.3, 40, 240, 120, LengthUnit.Millimeter);

// 获取底层Spreadsheet图表对象
spreadsheetCharts.Chart excelChart = (spreadsheetCharts.Chart)chart.ExcelChart;
spreadsheet.ExcelWorksheet worksheet = excelChart.Worksheet;

// 填充图表数据
worksheet.Cells["A1"].Value = "姓名";
worksheet.Cells["A2"].Value = "John Doe";
worksheet.Cells["A3"].Value = "Fred Nurk";
worksheet.Cells["A4"].Value = "Hans Meier";
worksheet.Cells["A5"].Value = "Ivan Horvat";

worksheet.Cells["B1"].Value = "薪资";
worksheet.Cells["B2"].Value = 3600;
worksheet.Cells["B3"].Value = 2580;
worksheet.Cells["B4"].Value = 3200;
worksheet.Cells["B5"].Value = 4100;

// 设置图表数据源
excelChart.SelectData(worksheet.Cells.GetSubrange("A1:B5"), true);

// 保存PPT
presentation.Save("饼图演示文稿.pptx");

内容的提问来源于stack exchange,提问作者Tejas Shaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:06:00