找回密码
 加入
搜索
查看: 5297|回复: 11

[AU3基础] 在使用EXCEL操作函数时,移动鼠标会导致数据复制错位

  [复制链接]
发表于 2015-8-11 08:58:33 | 显示全部楼层 |阅读模式
在使用EXCEL函数时,函数会打开EXCEL工作簿进行数据的读写操作,如果此时移动鼠标,这会导致_ExcelSheetActivate($oExcel, "目录")等函数操作错误,即使使用了BlockInput(1)函数阻断鼠标和键盘输入,结果也是一样的。不知道有没有更好的解决办法。谢谢!
发表于 2015-8-11 16:12:42 | 显示全部楼层
使用
$oExcel.Sheets('sheet名称').Range('单元格,例如:A1').Value
把变量放前面是读取,例如:把sheet名为sheet1里面单元格为A1的值提取出来赋值给$value,代码如下
$value = $oExcel.Sheets('sheet1').Range('A1').Value
把变量放后面是赋值,例如:把$value的值写入sheet名为sheet1里面单元格为A1的单元格里面,代码如下
$oExcel.Sheets('sheet1').Range('A1').Value = $value
发表于 2015-8-11 16:12:59 | 显示全部楼层
本帖最后由 ap112 于 2015-8-11 16:14 编辑

使用
$oExcel.Sheets('sheet名称').Range('单元格,例如:A1').Value
把变量放前面是读取,例如:把sheet名为sheet1里面单元格为A1的值提取出来赋值给$value,代码如下
$value = $oExcel.Sheets('sheet1').Range('A1').Value
把变量放后面是赋值,例如:把$value的值写入sheet名为sheet1里面单元格为A1的单元格里面,代码如下
$oExcel.Sheets('sheet1').Range('A1').Value = $value
网速好差!!!!!!!!!!!!!!!!!!!
 楼主| 发表于 2015-8-11 22:40:56 | 显示全部楼层
回复 3# ap112

这样是不是就不可以用激活工作表了?这种写法是宏写法吧?
发表于 2015-8-12 08:50:20 | 显示全部楼层
$oExcel.Sheets("表名").Activate
这句可以激活你的工作表
发表于 2015-8-12 13:12:24 | 显示全部楼层
回复 1# smooth
写入数据时隐藏工作表,等写完后再显示工作表。
 楼主| 发表于 2015-8-13 08:03:46 | 显示全部楼层
回复  smooth
写入数据时隐藏工作表,等写完后再显示工作表。
xms77 发表于 2015-8-12 13:12


我现在就是这样操作的,但是如果复制数据时能显示目标工作簿,这样感觉会更好。
 楼主| 发表于 2015-8-13 08:06:30 | 显示全部楼层
回复 5# ap112

你上面的写法,是不需要激活工作表的吧,写入数据时直接带着工作表的名称,这样或许可以解决复制数据时鼠标移动导致数据复制错位的问题。
发表于 2015-8-13 08:50:04 | 显示全部楼层
是滴回复 8# smooth
 楼主| 发表于 2015-8-16 08:07:31 | 显示全部楼层
回复 9# ap112

但是这样写,也有个弊端,就是在写代码的时候,每复制一个单元格,就必须写一行代码,因为单元格只能用字母+数字来表示,比如A1单元格。如果用_ExcelReadCell函数来写,就可以使用for...next来对一片区域读写。
发表于 2015-8-17 09:19:17 | 显示全部楼层
把代码贴出来 大家帮你看看 
此外 既然动鼠标会有影响 你不动就是 我一般操作脚本时,电脑也不做别的事情
发表于 2015-8-17 09:21:55 | 显示全部楼层
回复 10# smooth
#include <Excel.au3>
#include <Array.au3>
$oExcel = _ExcelBookOpen(@ScriptDir&"\test.xlsx")

;;取A1,B1,C1,D1的数值

For $i = 1 To 4
        $MyArray = $oExcel.ActiveSheet.range(chr(65+$i-1)&1).value 
        MsgBox(0,"方法一",$MyArray)
Next

;;取A1到A10的数值

For $i = 1 To 10
        $MyArray = $oExcel.ActiveSheet.Cells($i,1).value 
        MsgBox(0,"方法二",$MyArray)
Next

;;换一个想法使用数组读取也是一个区域呀
;;读取单行或单列可以试用一维数组的方法
Local $MyArray[10] 
$MyArray = $oExcel.ActiveSheet.range("A1:A10").value
_ArrayDisplay($MyArray,"一维数组方法")
;;读取单二维区域可以试用二维数组的方法
Local $MyArray[10][4] 
$MyArray = $oExcel.ActiveSheet.range("A1:D10").value
_ArrayDisplay($MyArray,"二维数组方法")
要是在做关于Excel的可以参考一下
http://www.autoitx.com/forum.php ... 8190&highlight=
http://www.autoitx.com/forum.php ... 7488&highlight=
http://www.autoitx.com/forum.php ... 7934&highlight=
http://www.autoitx.com/forum.php ... 7506&highlight=
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 20:14 , Processed in 0.092999 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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