smooth 发表于 2015-8-11 08:58:33

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

在使用EXCEL函数时,函数会打开EXCEL工作簿进行数据的读写操作,如果此时移动鼠标,这会导致_ExcelSheetActivate($oExcel, "目录")等函数操作错误,即使使用了BlockInput(1)函数阻断鼠标和键盘输入,结果也是一样的。不知道有没有更好的解决办法。谢谢!

ap112 发表于 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

ap112 发表于 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网速好差!!!!!!!!!!!!!!!!!!!

smooth 发表于 2015-8-11 22:40:56

回复 3# ap112

这样是不是就不可以用激活工作表了?这种写法是宏写法吧?

ap112 发表于 2015-8-12 08:50:20

$oExcel.Sheets("表名").Activate这句可以激活你的工作表

xms77 发表于 2015-8-12 13:12:24

回复 1# smooth
写入数据时隐藏工作表,等写完后再显示工作表。

smooth 发表于 2015-8-13 08:03:46

回复smooth
写入数据时隐藏工作表,等写完后再显示工作表。
xms77 发表于 2015-8-12 13:12 http://www.autoitx.com/images/common/back.gif

我现在就是这样操作的,但是如果复制数据时能显示目标工作簿,这样感觉会更好。

smooth 发表于 2015-8-13 08:06:30

回复 5# ap112

你上面的写法,是不需要激活工作表的吧,写入数据时直接带着工作表的名称,这样或许可以解决复制数据时鼠标移动导致数据复制错位的问题。

ap112 发表于 2015-8-13 08:50:04

{:face (114):}是滴回复 8# smooth

smooth 发表于 2015-8-16 08:07:31

回复 9# ap112

但是这样写,也有个弊端,就是在写代码的时候,每复制一个单元格,就必须写一行代码,因为单元格只能用字母+数字来表示,比如A1单元格。如果用_ExcelReadCell函数来写,就可以使用for...next来对一片区域读写。

xlj310 发表于 2015-8-17 09:19:17

把代码贴出来 大家帮你看看 
此外 既然动鼠标会有影响 你不动就是 我一般操作脚本时,电脑也不做别的事情

ap112 发表于 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
$MyArray = $oExcel.ActiveSheet.range("A1:A10").value
_ArrayDisplay($MyArray,"一维数组方法")
;;读取单二维区域可以试用二维数组的方法
Local $MyArray
$MyArray = $oExcel.ActiveSheet.range("A1:D10").value
_ArrayDisplay($MyArray,"二维数组方法")要是在做关于Excel的可以参考一下
http://www.autoitx.com/forum.php?mod=viewthread&tid=48190&highlight=
http://www.autoitx.com/forum.php?mod=viewthread&tid=47488&highlight=
http://www.autoitx.com/forum.php?mod=viewthread&tid=47934&highlight=
http://www.autoitx.com/forum.php?mod=viewthread&tid=47506&highlight=
页: [1]
查看完整版本: 在使用EXCEL操作函数时,移动鼠标会导致数据复制错位