Delphi 修改文本框中内容

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 属性返回 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";

 

执行成功。

 

总结下吧。

  1. 在Excel 中录制的宏不可全信
  2. 帮助也不可全信
  3. 以上两点只针对用 Delphi 去操作Excel时成立,因为那些都不是为Delphi而准备的
  4. 每天至少要睡6小时,不要熬夜。因为这些都是我在睡一觉之后的第二天才弄出来的,在第一天是怎么都出不来。
  5. 不会时多问,上网找,可千万不要像我这样弄了四个多小时整出来,人生没多少四小时的。不过我是没人可问,在网上搜了N多遍也找不到答案的情况下,才自己动手的了。不过自己做出来会很高兴的。
  6. 信念很重要,永不放弃!(在第一天时,我对这个问题基本是处于绝望的境地了)

猜你喜欢

转载自blog.csdn.net/xhfbx/article/details/83379022