找回密码
 加入
搜索
查看: 3201|回复: 9

[AU3基础] 怎样把已经打开的EXCEL表的单元格的值赋予变量(已解决)

  [复制链接]
发表于 2013-4-15 01:52:49 | 显示全部楼层 |阅读模式
本帖最后由 wsxjwsxj 于 2013-4-15 23:33 编辑

#include <excel.au3>
#include<file.au3>

Opt("WinWaitDelay",1)          ;更改每次成功执行窗口相关操作后的延迟时间长度。以毫秒为单位(默认值 = 250)。
Opt("WinTitleMatchMode",4)     ;更改窗口函数在执行搜索操作时的标题匹配模式。4 = 高级模式
Opt("WinDetectHiddenText",1)   ;指定是否让隐藏的窗口文本也能被窗口匹配函数“看见”(1 = 检测隐藏文本)。
Opt("MouseCoordMode",0)        ;设置用于鼠标函数的坐标参照,可以是绝对位置也可以是相对当前激活窗口的坐标位置(0)。

Dim $Xls_File = FileOpenDialog("请选择Excel文件  -----",@ScriptDir & "\","xls文件 (*.xls)",1)
$oExcel = _ExcelBookOpen($Xls_File, 1)

dim $aa

$aa = $oExcel.ActiveSheet.cells(2,1).value
msgbox(4096,"查出变量$AA的值",$aa,100)
msgbox(4096,"查出$oExcel的值",$oExcel,100)

=================================================
上面这段代码,可以把打开EXCEL文件,并把活动表的单元格A2的值传给变量。
$AA的值可以看到,但$oExcel的值却是空的呢?

另外想问的是:如果我已经打开了EXCEL表,怎么样定义$oExcel ?

花了好长时间,也只能做到,每次运行程序的时候要重新打开EXCEL表一次。请各位高手帮忙!!
我的问题是,如果
 楼主| 发表于 2013-4-15 02:02:51 | 显示全部楼层
我是想做个程序,把已经打开的EXCEL表中各单元格中的数值先存在变量中,然后进入另外一个软件的窗口,把各个变量的值再传给相应的表格中。
在写代码的过程中,$aa = ActiveSheet.cells(2,1).value
这句总是出问题,不得已,才抄的打开EXCEL文件的语句,来解决$oExcel.的问题。 凑合能用了。但是,如果EXCEL是打开的呢,这个程序还会再打开一次。  高手看过来哦。
发表于 2013-4-15 06:17:28 | 显示全部楼层
用一下_ExcelBookAttach
 楼主| 发表于 2013-4-15 07:42:26 | 显示全部楼层
这个函数,我在EXCEL.AU3里面看到了,但是没有例子,不知道该怎么用. 在百度上搜索了,也没有相关的说明, 还麻烦您给具体的改一改吧.  多谢了!
发表于 2013-4-15 09:50:07 | 显示全部楼层
回复 4# wsxjwsxj



示例:
; **************************************************************************************************************
; 示例 1 - 基于所选择的模式附加到第一个匹配字符串的Microsoft Excel的实例上.
; **************************************************************************************************************

#include <Excel.au3>
#include <File.au3>

Local $sFilePath = @TempDir & "\Temp.xls"
If Not _FileCreate($sFilePath) Then ;创建一个.XLS文件
    MsgBox(4096, "错误", " 创建文件时出错 - " & @error)
EndIf

_ExcelBookOpen($sFilePath)
Local $oExcel = _ExcelBookAttach($sFilePath) ;搜索模式: Excel工作表路径(默认模式)
_ExcelWriteCell($oExcel, "看到了吗?写入信息成功了!", 1, 1) ;对指定的Excel工作表单元格写入信息.
MsgBox(4096, "退出", "按[确定]保存文件并退出")
_ExcelBookClose($oExcel, 1, 0);在没有任何提示的情况下保存该文件,然后关闭.

; **************************************************************************************************************
; 示例 2 - 基于所选择的模式附加到第一个匹配字符串的Microsoft Excel的实例上.
; **************************************************************************************************************

#include <Excel.au3>
#include <File.au3>

$sFilePath = @TempDir & "\Temp.xls"
If Not _FileCreate($sFilePath) Then  ;创建一个.XLS文件
    MsgBox(4096, "错误", " 创建文件时出错 - " & @error)
EndIf

_ExcelBookOpen($sFilePath)
$oExcel = _ExcelBookAttach("Temp.xls", "FileName") ;搜索模式: Excel工作表的名称
_ExcelWriteCell($oExcel, "看到了吗?写入信息成功了!", 1, 1) ;对指定的Excel工作表单元格写入信息.
MsgBox(4096, "退出", "按[确定]保存文件并退出")
_ExcelBookClose($oExcel, 1, 0);在没有任何提示的情况下保存该文件,然后关闭.

; **************************************************************************************************************
; 示例 3 - 基于所选择的模式附加到第一个匹配字符串的Microsoft Excel的实例上.()
; **************************************************************************************************************

#include <Excel.au3>
#include <File.au3>

$sFilePath = @TempDir & "\Temp.xls"
If Not _FileCreate($sFilePath) Then ;创建一个.XLS文件
    MsgBox(4096, "错误", " 创建文件时出错 - " & @error)
EndIf

_ExcelBookOpen($sFilePath)
$oExcel = _ExcelBookAttach("Microsoft Excel - Temp", "Title") ;搜索模式: Excel工作表的窗口标题
_ExcelWriteCell($oExcel, "看到了吗?写入信息成功了!", 1, 1) ;对指定的Excel工作表单元格写入信息.
MsgBox(4096, "退出", "按[确定]保存文件并退出")
_ExcelBookClose($oExcel, 1, 0) ;在没有任何提示的情况下保存该文件,然后关闭.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2013-4-15 10:07:31 | 显示全部楼层
在百度上找到一个答案,说是_ExcelBookAttach的作用是找出路径。没有解释,没有例子。 在线焦急等。
msgbox(4096,"查出$oExcel的值",$oExcel,100) 这句代码,为什么得出的是空值呢?
发表于 2013-4-15 21:16:05 | 显示全部楼层
$oExcel 是个对象吧?
 楼主| 发表于 2013-4-15 23:25:22 | 显示全部楼层
#include <excel.au3>
#include<file.au3>

Opt("WinWaitDelay",1)          ;更改每次成功执行窗口相关操作后的延迟时间长度。以毫秒为单位(默认值 = 250)。
Opt("WinTitleMatchMode",4)     ;更改窗口函数在执行搜索操作时的标题匹配模式。4 = 高级模式
Opt("WinDetectHiddenText",1)   ;指定是否让隐藏的窗口文本也能被窗口匹配函数“看见”(1 = 检测隐藏文本)。
Opt("MouseCoordMode",0)        ;设置用于鼠标函数的坐标参照,可以是绝对位置也可以是相对当前激活窗口的坐标位置(0)。

$oExcel = _ExcelBookAttach("测试表.xls", "FileName")   ;搜索模式: Excel工作表的名称,。
dim $aa,$bb

WinWait("Microsoft Excel - 测试表.xls","")
If Not WinActive("Microsoft Excel - 测试表.xls","") Then WinActivate("Microsoft Excel - 测试表.xls","")
WinWaitActive("Microsoft Excel - 测试表.xls","")

$aa = $oExcel.ActiveSheet.cells(2,1).value
$bb = $oExcel.ActiveSheet.cells(2,2).value

msgbox(4096,"12345678",$aa,100)
msgbox(4096,"7778899",$bb,100)
 楼主| 发表于 2013-4-15 23:28:46 | 显示全部楼层
非常感谢Darren_Lin,用了$oExcel = _ExcelBookAttach("测试表.xls", "FileName")  这条语句后,达到了我想要的结果。就是可以直接从已经打开的EXCEL中取值。
发表于 2016-4-7 11:29:51 | 显示全部楼层
“直接从已经打开的EXCEL中取值”
学习标记
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 04:17 , Processed in 0.095781 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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