我正在尝试复制excel图表,然后使用C ++ / CLI将它们粘贴到PowerPoint中,尽管我在尝试使用Copy()方法时遇到了困难。以下是我的代码的简化版本:
Worksheet = dynamic_cast<Excel::Worksheet^>(WS[3]);
chartObjects = dynamic_cast<Excel::ChartObjects^>(Worksheet->ChartObjects(paramMissing));
existingChartObject = dynamic_cast<Excel::ChartObject^>(chartObjects->Item(2));
existingChartObject->Copy();
shapeRange = Slide->Shapes->Paste();
但是当我尝试这个时它会给我一个错误:
An unhandled exception of type 'System.NullReferenceException' occurred in Excel To PPT.exe
Additional information: Object reference not set to an instance of an object.
现在我的Excel工作簿在第3页开始的每张工作表上都有 6 图表。如果我复制工作表3上的所有图表并将它们放到像这样的幻灯片上。
将此尝试称为
for(count = 1, count <= 6; ++count){
Worksheet = dynamic_cast<Excel::Worksheet^>(WS[2]);
chartObjects = dynamic_cast<Excel::ChartObjects^>(Worksheet->ChartObjects(paramMissing));
existingChartObject = dynamic_cast<Excel::ChartObject^>(chartObjects->Item(count));
existingChartObject->Copy();
shapeRange = Slide->Shapes->Paste();
}
然后没有抛出异常。现在,如果我尝试做同样的事情,但从图2而不是1开始,我会抛出异常。像这样:
将此尝试称为
for(count = 2, count <= 6; ++count){
Worksheet = dynamic_cast<Excel::Worksheet^>(WS[2]);
chartObjects = dynamic_cast<Excel::ChartObjects^>(Worksheet->ChartObjects(paramMissing));
existingChartObject = dynamic_cast<Excel::ChartObject^>(chartObjects->Item(count));
existingChartObject->Copy();
shapeRange = Slide->Shapes->Paste();
}
当我单步执行并在第二次尝试时将鼠标悬停在existingCharObject
上时,它不是空的,看起来与尝试1中的完全相同。
为什么第二次尝试会抛出异常,但第一次不会?我应该能够复制任何我想要的Excel ChartObject?它迫使我从整个工作簿中的ChartObject 1开始,然后继续工作,不允许我随机复制ChartObjects。
如果您需要更多信息,请与我们联系。我不想将整个项目都放到这里,这是项目中唯一给我提问的部分。