Delphi 修改Excel 中文本框内容
首先看一下Excel中录制的宏代码吧
Sub Macro1()
'
' Macro1 Macro
' 宏由 HFBiao 录制,时间: 2010-5-15
'
ActiveSheet.Shapes("Text Box 1").Select
Selection.Characters.Text = "55555555555555555555555555"
With Selection.Characters(Start:=1, Length:=26).Font
.Name = "宋体"
.FontStyle = "常规"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("H17").Select
End Sub
只能先这么说了, Delphi 不等于 VB , 不要太相信录制的宏代码,因为它们不是为Delphi准备的。而我之前却是没有这般认识的。
先看宏代码
ActiveSheet.Shapes("Text Box 1").Select
Selection.Characters.Text = "55555555555555555555555555"
这是选择了一个文本框后变更内容的代码,将它翻译成Delphi 中应该下面这样的
asheet:=FExcelapplication.Sheets.Item[1];
asheet. Shapes['Text Box 1'].Characters.Text = "55555555555555555555555555";
执行它,提示找不到成员,换用序号表示
asheet:=FExcelapplication.Sheets.Item[1];
asheet.Shapes[1].Characters.Text = "55555555555555555555555555";
执行,还是提示找不到成员,这下就有点晕了。
寻找 Excel VB 的帮助,发现如下:
可用 Shapes 属性返回 Shapes 集合。下例选定 myDocument 上的所有图形。
Set myDocument = Worksheets(1)
myDocument.Shapes.SelectAll
注释 如果要同时对工作表上的所有图形进行某项操作(例如删除或设置属性),请选定所有图形,然后对选定区域应用 ShapeRange 属性以创建一个包含工作表上所有图形的 ShapeRange 对象,然后对 ShapeRange 对象应用适当的属性或方法。
可用 Shapes(index) (其中 index 是图形的名称或索引号)返回单个的 Shape 对象。下例设置 myDocument 上第一个图形的预设阴影的填充。
Set myDocument = Worksheets(1)
myDocument.Shapes(1).Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientBrass
-------------------------帮助引用完成--------------------------
用Delphi 去操作Excel ,那帮助也是不可全信的,还是那句话,因为它们不是为Delphi准备的。
可用 Shapes(index)(其中 index 是图形的名称或索引号)返回单个的 Shape 对象。
在帮助中用 Shapes(index) 返回单个对象,却在Delphi 中是不行的。
继续查帮助,发现 Shapes 中有 Item 方法。 在这时,我想我是应该找到了。
更改 Delphi 代码
asheet:=FExcelapplication.Sheets.Item[1];
MyShape:= asheet.Shapes.Item[1];
//asheet.Shapes[1].Characters.Text = "55555555555555555555555555";
代码成功执行,尝试提取对像 ID号
asheet:=FExcelapplication.Sheets.Item[1];
MyShape:= asheet.Shapes.Item[1];
ShowMessage(IntToStr(MyShape.ID));
代码成功执行,ID号显示,这说明单个的Shape对象是己经取到了,剩下来的就应该简单了。
可事实并不像想像中的那么简单!
更改 Delphi 代码
asheet:=FExcelapplication.Sheets.Item[1];
MyShape:= asheet.Shapes.Item[1];
MyShape.Characters.Text = "55555555555555555555555555";
执行 ,
报错 Method 'Characters' not supported by automation object , Characters 竟不支持。这是再次证明了录制出来的宏是不能信的。只得乖乖的去找帮助了。
查找 Shape 对像的属性 ,发现有 TextFrame 属性,TextFrame 属性 返回 TextFrame 对象
以下为 TextFrame 对象的定义
代表 Shape 对象中的文本框。包含文本框中的文字,也包含用于控制文本框的对齐方式及位置的属性和方法。
看到这个,我是有点激动了,我知道好运己降临到我身上。
更改 Delphi 代码
asheet:=FExcelapplication.Sheets.Item[1];
MyShape:= asheet.Shapes.Item[1];
MyShape.TextFrame.Characters.Text = "55555555555555555555555555";
执行成功。
总结下吧。