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 に答える