我使用Delphi的西雅图建立并显示在Excel图表(2013年)。 我建我的图表从数据透视表。 该图表显示一切正常。 它有一个默认的标题,所以我想改变这种状况。 这应该是一个简单的属性变化,但我不断收到AV错误。 当我谷歌,我能找到的最接近的事情提到,我需要选择表和/或图表标题之前,我改变它。 [增订]下面是示出该问题的工作样品。
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;
我找不到任何方式改变我的标题。 我甚至不能找到任何方式来读取现有的标题,更别说改变它。
对于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;
我能够设置如下标题。 所不同的是选择该图表以能够通过引用它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
。
该作品另一种选择是让之后的某一点(它不工作)类型安全的旅途中,依靠在MS文档中发现VBA的例子(不与生成的类型库的匹配签名)。 这允许在图表上直接运行。
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 - Changing Chart Title in Excel causes AV - Updated with complete sample