1

使用 Delphi,我创建了一个包含一些数据值的 Excel 表,然后创建了一个图表:

WChart := ((ExcelApplication1.Workbooks[1].ActiveSheet) as _Worksheet).Shapes.AddChart(xl3DPie,
                                 EmptyParam, EmptyParam,
                                 EmptyParam, EmptyParam).Chart;

图表在工作表上正确创建。现在我想将它移动到这样的新工作表:

WChart.Location(xlLocationAsNewSheet, EmptyParam);

这会导致访问冲突。

我用谷歌搜索了很多,没有找到使用 Delphi 的示例。所有其他语言(如 VBA)都在做与我的代码等效的事情。

任何帮助表示赞赏。

编辑:

这是触发 AV 的行的汇编代码:

WChart.Location(xlLocationAsNewSheet, EmptyParam);
   lea eax,[ebp-$0000019c]
   call @IntfClear
   push eax
   lea eax,[ebp-$000001ac]
   call EmptyParam
   push dword ptr [ebp-$000001a0]
   push dword ptr [ebp-$000001a4]
   push dword ptr [ebp-$000001a8]
   push dword ptr [ebp-$000001ac]
   push $01
   mov eax,[ebp-$14]                 // [ebp-$14] is WChart value
   push eax
   mov eax,[eax]
   call dword ptr [eax+$00000198]    // Supposed to call Location()
   call @CheckAutoResult
4

1 回答 1

2

我无法弄清楚您遇到的具体问题(我得到了不同的 AV,但它仍然是 AV)。但是,如果您有兴趣,这里有一个解决方法。

var
  Book: _Workbook;
  LCID: Integer;
  Chart: _Chart;
begin
  LCID := GetUserDefaultLCID;

  Book := ExcelApplication1.ActiveWorkbook;
  Chart := Book.Charts.Add(EmptyParam, EmptyParam, 
                           EmptyParam, EmptyParam, LCID) as _Chart;

  // Tested, and the second param below can be EmptyParam to leave
  // the new sheet name as "Chart1".
  Chart.Location(xlLocationAsNewSheet, 'ChartSheet');
end;
于 2013-11-05T16:45:44.640 回答