使用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")
错误原因及解决步骤
- 类型转换错误:
chart.ExcelChart返回的是GemBox.Spreadsheet.Charts.Chart类型,而非ExcelChart,错误的类型转换导致无法访问Worksheet属性。 - 图表类型未切换:原代码创建的是柱状图,需改为饼图类型。
- 方法名大小写错误: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
相关产品推荐
相关产品推荐

