对以下代码段的正确调用是什么
//这个抛出异常
Excel.Range range = worksheet.get_Range("A3", "B4");
myChart.SetSourceData(range.ToString(), Excel.XlRowCol.xlColumns); // Throws an
//抛出异常
Exception Source: Microsoft.Office.Interop.PowerPoint
Exception Type: System.Runtime.InteropServices.COMException
Exception Message: Error HRESULT E_FAIL has been returned from a
call to a COM component.
Exception Target Site: SetSourceData
//这个没有编译
myChart.SetSourceData(range, Excel.XlRowCol.xlColumns);
//编译错误
1> error CS1502: The best overloaded method match for 'Microsoft.Office.Interop.
PowerPoint.Chart.SetSourceData(string, object)' has some invalid arguments
1> error CS1503: Argument 1: cannot convert from
'Microsoft.Office.Interop.Excel.Range' to 'string'
答案 0 :(得分:1)
SetSourceData 以完全不同的方式运行,具体取决于您是否使用Excel库中的方法或其他库(如PowerPoint):
Sub SetSourceData(来源为范围,[PlotBy]) Excel.Chart的成员
Sub SetSourceData(Source as String ,[PlotBy]) PowerPoint.Chart的成员
在PowerPoint模型中,该方法需要一个字符串,其中包含包含源数据的图表数据范围的地址!
https://msdn.microsoft.com/en-us/library/office/ff746759.aspx?f=255&MSPPError=-2147217396
在两个不同的MSO对象模型中以两种不同的方式操作的相同方法。现在,这是聪明的微软!
答案 1 :(得分:0)
这实际上很奇怪,大多数文档将第一个范围参数定义为范围对象但实际上应该作为字符串传递
wdChart.SetSourceData("Sheet1!$A$1:$B$4", oMissing);
答案 2 :(得分:0)
我认为这应该有效:
myChart.SetSourceData(dataSheet.Name + "!" + dataSheet.UsedRange.Address, Excel.XlRowCol.xlColumns);
更新:获取数据表名称非常重要。如果需要选择特定范围,则不是整个工作表将dataSheet.UsedRange替换为您的范围。我需要这个并测试它。它奏效了。