找回密码  加入

AUTOIT CN

搜索
查看: 420|回复: 16

[AU3基础] 如何获取当前excel工作表中的当前单元格所在的列名?

[复制链接]
发表于 2018-9-11 16:29:54 | 显示全部楼层 |阅读模式
我需要知道当前excel工作表中的当前单元格所在的列名,以便当光标移动后,再返回这个单元格。在论坛上找了很多操作excel的帖子,也没有找到相关的内容,请大师帮助我解决一下,万分感谢!!!!
发表于 2018-9-11 19:17:05 | 显示全部楼层
参考以下说明:

Range.Address 属性
返回一个 String 值,它代表宏语言的区域引用。
语法

表达式.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

表达式   一个代表 Range 对象的变量。

参数

名称 必选/可选 数据类型 描述
RowAbsolute 可选 Variant 如果为 True,则以绝对引用返回引用的行部分。默认值为 True。
ColumnAbsolute 可选 Variant 如果为 True,则以绝对引用返回引用的列部分。默认值为 True。
ReferenceStyle 可选 XlReferenceStyle 引用样式。默认值为 xlA1。
External 可选 Variant 如果为 True,则返回外部引用。如果为 False,则返回本地引用。默认值为 False。
RelativeTo 可选 Variant 如果 RowAbsolute 和 ColumnAbsolute 为 False,并且 ReferenceStyle 为 xlR1C1,则必须包括相对引用的起始点。此参数是定义起始点的 Range 对象。

说明


如果引用包含多个单元格,RowAbsolute 和 ColumnAbsolute 将应用于所有的行和列。



示例


下例对工作表 Sheet1 中的同一单元格地址使用了四种不同的表达方式。示例中的注释为将要显示于消息框中的地址。

Visual Basic for Applications
Set mc = Worksheets("Sheet1").Cells(1, 1)
MsgBox mc.Address()                              ' $A$1
MsgBox mc.Address(RowAbsolute:=False)            ' $A1
MsgBox mc.Address(ReferenceStyle:=xlR1C1)        ' R1C1
MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
    RowAbsolute:=False,     _
    ColumnAbsolute:=False,  _
    RelativeTo:=Worksheets(1).Cells(3, 3))        ' R[-2]C[-2]
 楼主| 发表于 2018-9-12 03:44:43 | 显示全部楼层
h20040606 发表于 2018-9-11 19:17
参考以下说明:

Range.Address 属性

感谢大师的热心帮助,但是我是想用autoit来操作Excel,并定位当前单元格地址,并且在移动了光标后,再返回先前定位的单元格。请问要如何写一段简单的脚本呢?
发表于 2018-9-12 07:05:54 | 显示全部楼层
试一下
$row=$Excel.activesheet.activecell.row
$col=$Excel.activesheet.activecell.Column
-----其他操作
-$$Excel.activesheet.cells($row,$col).activate
 楼主| 发表于 2018-9-12 20:34:55 | 显示全部楼层
h20040606 发表于 2018-9-12 07:05
试一下
$row=$Excel.activesheet.activecell.row
$col=$Excel.activesheet.activecell.Column

您好,大师,我试了一下你的代码,还是报错。请帮我看一下。

#include <excel.au3>

$excel=objcreate("excel.application")
$excel.visible=true
WinActivate('test.xlsx - Excel')
Sleep(1000)
$row=$Excel.activesheet.activecell.row
$col=$Excel.activesheet.activecell.Column
Sleep(1000)
Send("{right 9}")
Sleep(1000)
$Excel.activesheet.cells($row,$col).activate

报错信息如下:
>运行:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "D:\mega\ledwork\autoit\b2.au3"   
--> 按 Ctrl+Alt+Break 重新启动或按 Ctrl+Break 停止
"D:\mega\ledwork\autoit\b2.au3" (16) : ==> The requested action with this object has failed.:
$row=$Excel.activesheet.activecell.row
$row=$Excel.activesheet^ ERROR
->14:33:26 AutoIt3.exe 结束.rc:1
+>14:33:26 AccAu3Wrapper 完成.

发表于 2018-9-13 09:47:55 | 显示全部楼层
本帖最后由 h20040606 于 2018-9-13 09:48 编辑

#include <excel.au3>
$obj=_Excel_Open(1)
$obj.visible=true
$Excel=_Excel_BookOpen($obj,"c:\test.xlsx")
;光标移动到A3
$Excel.activesheet.range("a3").select
$Excel.activesheet.range("a3").activate
$row=$obj.activecell.row
$col=$obj.activecell.Column

;光标移动到f5
Sleep(3000)
$Excel.activesheet.cells(5,6).Select
$Excel.activesheet.cells(5,6).activate

;恢复元光标位置
Sleep(3000)
$Excel.activesheet.cells($row,$col).select
$Excel.activesheet.cells($row,$col).activate
发表于 2018-9-13 09:58:47 | 显示全部楼层
本帖最后由 h20040606 于 2018-9-13 12:34 编辑

#include <excel.au3>
$obj=_Excel_Open(1)
$obj.visible=true
$Excel=_Excel_BookOpen($obj,"c:\test.xlsx")
;光标移动到A3
$Excel.activesheet.range("a3").select
$Excel.activesheet.range("a3").activate
$addr=$obj.selection.address

;光标移动到f5
Sleep(3000)
$Excel.activesheet.cells(5,6).Select
$Excel.activesheet.cells(5,6).activate

;恢复元光标位置
Sleep(3000)
$Excel.activesheet.range($addr).select
$Excel.activesheet.range($addr).activate
发表于 2018-9-13 10:19:22 | 显示全部楼层
两种方法均可
 楼主| 发表于 2018-9-13 15:25:18 | 显示全部楼层
本帖最后由 zzghty 于 2018-9-13 15:47 编辑
h20040606 发表于 2018-9-13 09:58
#include
$obj=_Excel_Open(1)
$obj.visible=true

您好,非常感谢您的耐心解答,第二个方法测试通过了,第一个还是报了错。但我还有二个问题,一是test.xlsx文件因为是我根据我前面的操作流程,已经打开了的,不能再打开了。二是我需要定位当前单元格的地址,但这个地址是动态的,因为每次打开文件都因为新增列而发生了变动。最后,想请教一下,关于在autoit里操作excel的语法帮助,在哪里可以看到呢?我还有很多需要了解的地方呀,每次都麻烦您,心里总是过意不去。
发表于 2018-9-14 09:32:12 | 显示全部楼层
我用的版本是3.3.12.0。autoit已经提供了部分UDF。
对已经打开的文件,可以用Excel_BookAttach.
参考以下:
#include <excel.au3>

$Excel=_Excel_BookAttach("test.xlsx","filename")
If Not IsObj($Excel) Then Exit MsgBox(0,"提示","当前没有打开test.xlsx")

$obj=$Excel.parent


If  Not isobj ($obj.selection)  Then Exit MsgBox(0,"提示","当前没有选择单元格")
$addr=$obj.selection.address()

;光标移动到f5
Sleep(2000)
$Excel.activesheet.cells(5,6).Select
$Excel.activesheet.cells(5,6).activate

Sleep(2000)

Send("{right 9}")
;恢复元光标位置
Sleep(1000)
$Excel.activesheet.range($addr).select
$Excel.activesheet.range($addr).activate
发表于 2018-9-14 09:37:56 | 显示全部楼层
本帖最后由 h20040606 于 2018-9-14 10:56 编辑

我也是一知半解,你可以参考以下VBA for EXCEL
发表于 2018-9-14 16:28:10 | 显示全部楼层
autoit可以直接操作单元格内容啊。回到最初那个干吗?行和列记住就行了。excelobj.cells(行,列).value就是值了。不知道你想表达啥意图。
 楼主| 发表于 2018-9-14 20:35:55 | 显示全部楼层
h20040606 发表于 2018-9-14 09:32
我用的版本是3.3.12.0。autoit已经提供了部分UDF。
对已经打开的文件,可以用Excel_BookAttach.
参考以下 ...

感谢大师的回复,但是$Excel=_Excel_BookAttach("test.xlsx","filename")
If Not IsObj($Excel) Then Exit MsgBox(0,"提示","当前没有打开test.xlsx")
这二句,总是提示"当前没有打开test.xlsx",我明明打开了的呀,难道test.xlsx要输入完整的路径名吗?比如:D:\mega\ledwork\qg\test.xlsx。我用的autoit是3.6.2版
发表于 2018-9-16 10:00:23 | 显示全部楼层
那个版本应当不支持lxls格式的。我觉得3.3.12.0比较好
 楼主| 发表于 2018-9-20 18:11:36 | 显示全部楼层
非常感谢大师!我的是3.3.14.0的版本,确实不支持很多语法,用了你说的3.3.12.0的版本,以上代码终于测试通过了,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备15028933号-3 )谷歌 百度

GMT+8, 2018-11-13 15:52 , Processed in 0.109587 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表