Delphi - 更改 Excel 中的图表标题会导致 AV - 已更新完整样本
Delphi - Changing Chart Title in Excel causes AV - Updated with complete sample
我正在使用 Delphi 西雅图在 Excel (2013) 中构建和显示图表。我从一个枢轴 table 构建我的图表。图表显示一切正常。它有一个默认标题,所以我想更改它。这应该是一个简单的 属性 更改,但我不断收到 AV 错误。当我 google 时,我能找到的最接近的东西提到我需要 select 图表 and/or 图表标题,然后才能更改它。 [已更新]这是一个显示问题的工作示例。
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
// Try to access the Chart Title... This always AVs here.
myChart.Chart.HasTitle[LOCALE_USER_DEFAULT] := True;
// Set Title Text. If Comemnt out above line, this AVs as well
myChart.Chart.ChartTitle[LOCALE_USER_DEFAULT].Caption := 'New Chart Title';
end;
我找不到任何方法来更改我的标题。我什至找不到任何方法来阅读现有标题,更不用说更改它了。
Microsoft Object ChartTitle 模型文档说这是正确的 属性...(https://msdn.microsoft.com/en-us/library/office/ff840521.aspx)
附加信息:我确实生成了自己的类型库 Excel_TLB,并且在我的 USES 子句中有它。我完整的 USES 子句是...
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ComObj, Excel_TLB;
我可以如下设置标题。不同的是select图表可以通过ActiveChart
来参考。请注意,我的办公室 14 没有 AddChart2
,所以我使用了 AddChart
。
uses
comobj, excel_tlb;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
// myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
myChart := RawDataSheet.Shapes.AddChart(xlColumnClustered, 200, 10, 300, 300);
myChart.Select(False);
oExcel.ActiveChart.HasTitle[LOCALE_USER_DEFAULT] := True;
oExcel.ActiveChart.ChartTitle[LOCALE_USER_DEFAULT].Caption := 'New Chart Title';
end;
另请注意,我不知道传递给 Select
的参数的含义。
另一个可行的选择是在某个时间点(它不再起作用)后放弃类型安全并依赖 VBA 在 MS 文档中找到的示例(它不将签名与生成的类型库的签名匹配)。这允许直接在图表上工作。
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
V: OleVariant;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
// myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
myChart := RawDataSheet.Shapes.AddChart(xlColumnClustered, 200, 10, 300, 300);
V := myChart.Chart;
V.HasTitle := True;
V.ChartTitle.Caption := 'Chart Title';
end;
我正在使用 Delphi 西雅图在 Excel (2013) 中构建和显示图表。我从一个枢轴 table 构建我的图表。图表显示一切正常。它有一个默认标题,所以我想更改它。这应该是一个简单的 属性 更改,但我不断收到 AV 错误。当我 google 时,我能找到的最接近的东西提到我需要 select 图表 and/or 图表标题,然后才能更改它。 [已更新]这是一个显示问题的工作示例。
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
// Try to access the Chart Title... This always AVs here.
myChart.Chart.HasTitle[LOCALE_USER_DEFAULT] := True;
// Set Title Text. If Comemnt out above line, this AVs as well
myChart.Chart.ChartTitle[LOCALE_USER_DEFAULT].Caption := 'New Chart Title';
end;
我找不到任何方法来更改我的标题。我什至找不到任何方法来阅读现有标题,更不用说更改它了。
Microsoft Object ChartTitle 模型文档说这是正确的 属性...(https://msdn.microsoft.com/en-us/library/office/ff840521.aspx)
附加信息:我确实生成了自己的类型库 Excel_TLB,并且在我的 USES 子句中有它。我完整的 USES 子句是...
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ComObj, Excel_TLB;
我可以如下设置标题。不同的是select图表可以通过ActiveChart
来参考。请注意,我的办公室 14 没有 AddChart2
,所以我使用了 AddChart
。
uses
comobj, excel_tlb;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
// myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
myChart := RawDataSheet.Shapes.AddChart(xlColumnClustered, 200, 10, 300, 300);
myChart.Select(False);
oExcel.ActiveChart.HasTitle[LOCALE_USER_DEFAULT] := True;
oExcel.ActiveChart.ChartTitle[LOCALE_USER_DEFAULT].Caption := 'New Chart Title';
end;
另请注意,我不知道传递给 Select
的参数的含义。
另一个可行的选择是在某个时间点(它不再起作用)后放弃类型安全并依赖 VBA 在 MS 文档中找到的示例(它不将签名与生成的类型库的签名匹配)。这允许直接在图表上工作。
procedure TForm1.Button1Click(Sender: TObject);
var
oExcel : ExcelApplication;
RawDataSheet :_Worksheet;
myChart: Shape;
V: OleVariant;
begin
oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
oExcel.Visible[LOCALE_USER_DEFAULT] := True;
// Add a New Workbook, with a single sheet
oExcel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT);
// Get the handle to the active Sheet, and insert some dummy data
RawDataSheet := oExcel.ActiveSheet as _Worksheet;
RawDataSheet.Range['A1', 'B10'].value2 := 10;
// Now add my chart
// myChart := RawDataSheet.Shapes.AddChart2(208, xlColumnClustered, 200, 10, 300, 300, True);
myChart := RawDataSheet.Shapes.AddChart(xlColumnClustered, 200, 10, 300, 300);
V := myChart.Chart;
V.HasTitle := True;
V.ChartTitle.Caption := 'Chart Title';
end;