如何使用Delphi中自带的ExcelApplication控件在Excel中绘图. ( 积分: 200 )

  • 主题发起人 主题发起人 tanxi
  • 开始时间 开始时间
T

tanxi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想使用Delphi自带的ExcelApplication控件在Excel中绘制一般的二位矢量图;
在当前Sheet中创建一个矩形,然后修改它的位置,大小,填充色,文本等属性;
在实际编程时创建一个矩形,控制大小,位置没什么问题;
但 我想通过程序修改这个Shape的文本,填充色时遇到问题,Shape对象本身好像没有提供
控制文本的接口,或者提供的都是只读的,一旦修改就会报出异常.

下面是部分源码,望高手指教.
.......
var
LCID : Integer;
wkBook :_Workbook;
wkSheet:_Worksheet;
Chart : Shape;
......
begin
......
LCID := GetUserDefaultLCID(); //获得唯一的LCID编号
ExcelApp.Connect; //开始操作之前 建立同Excel的联系
try
wkBook := ExcelApp.Workbooks.Add(EmptyParam, LCID);
ExcelApp.Visible[LCID]:=true;
wkSheet:=wkBook.Sheets.Item[1] as _WorkSheet;
Chart:=wkSheet.Shapes.AddShape(1,50,50,200,200);
Chart.Fill.ForeColor.RGB:=RGB(0,0,255);
with Chart do
begin
Chart.TextEffect.FontSize:=10;
Chart.PictureFormat.ColorType:=RGB(0,0,255);
end;
except
end;
ExcelApp.Disconnect; //结束操作之后 断开同Excel的联系
end;
 
我想使用Delphi自带的ExcelApplication控件在Excel中绘制一般的二位矢量图;
在当前Sheet中创建一个矩形,然后修改它的位置,大小,填充色,文本等属性;
在实际编程时创建一个矩形,控制大小,位置没什么问题;
但 我想通过程序修改这个Shape的文本,填充色时遇到问题,Shape对象本身好像没有提供
控制文本的接口,或者提供的都是只读的,一旦修改就会报出异常.

下面是部分源码,望高手指教.
.......
var
LCID : Integer;
wkBook :_Workbook;
wkSheet:_Worksheet;
Chart : Shape;
......
begin
......
LCID := GetUserDefaultLCID(); //获得唯一的LCID编号
ExcelApp.Connect; //开始操作之前 建立同Excel的联系
try
wkBook := ExcelApp.Workbooks.Add(EmptyParam, LCID);
ExcelApp.Visible[LCID]:=true;
wkSheet:=wkBook.Sheets.Item[1] as _WorkSheet;
Chart:=wkSheet.Shapes.AddShape(1,50,50,200,200);
Chart.Fill.ForeColor.RGB:=RGB(0,0,255);
with Chart do
begin
Chart.TextEffect.FontSize:=10;
Chart.PictureFormat.ColorType:=RGB(0,0,255);
end;
except
end;
ExcelApp.Disconnect; //结束操作之后 断开同Excel的联系
end;
 
我在Excel的VBA里面编写了这样一段代码是可以被执行的:
Sub changecolor()
Worksheets(1).Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub

但将它转化成Delphi里面的语句:
......
Chart.Fill.ForeColor.RGB:=RGB(0,0,255);
......
或是
Wksheet.Shapes.Item(1).Fill.ForeColor.RGB := RGB(255, 0, 0)
......
就会报错,我查VBA帮助 Shape对象的Fill属性是只读,
会不会是因为这个原因,Delphi中老报错?
但为什么Excel中又可以这样使用呢?
 
Fill.ForeColor.RGB 和 Characters.Text 之类根本不是 Shape 的属性,而是 Selection 的属性,当然要报错。
给你写了个过程,能用就结贴;不用也给个话
//FileName: 文件名; Text: 添加文字; 其它是左、上、宽、高、红、绿、蓝
uses ComObj;
procedure AddRectToXls(const FileName, Text: string; const Left, Top, Width, Height, R, G, B: Longint);
const
msoShapeRectangle = $00000001;
var
XlsApp: OleVariant;
begin
try
try
XlsApp := CreateOleObject('Excel.Application');
XlsApp.WorkBooks.Open(FileName);
XlsApp.ActiveSheet.Shapes.AddShape(msoShapeRectangle, Left, Top, Width, Height).Select;
XlsApp.Selection.Characters.Text := Text;
XlsApp.Selection.ShapeRange.Fill.Solid;
XlsApp.Selection.ShapeRange.Fill.ForeColor.RGB := RGB(R, G, B);
XlsApp.Visible := True;
except
if not VarIsEmpty(XlsApp) then
XlsApp.Quit;
end;
finally
XlsApp := Unassigned;
end;
end;
 
Fill.ForeColor.RGB 和 Characters.Text是 Shape 的属性,只不过是只读属性;这些属性必须在selection中进行修改.
不过你的思路大体不错.
 
后退
顶部