1

我正在尝试复制 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。

如果您需要更多信息,请告诉我。我不想把我的整个项目都过去,这是项目中唯一给我带来问题的部分。

4

0 回答 0