blue_dvd 发表于 2012-11-22 20:35:25

回复blue_dvd
刚用一楼的附件测试了,正常的啊!
kevinch 发表于 2012-11-22 19:05 http://autoitx.com/images/common/back.gif
如果在写Excel表格中有个进度条就好了,不知道能否实现?

kevinch 发表于 2012-11-23 08:42:09

回复 16# blue_dvd
其实用数组来转可能会快些,有空弄下,应该不至于那么慢,毕竟range类的操作最耗时间;进度条的话,au3不是可以很方便的插入

blue_dvd 发表于 2012-11-23 09:22:21

回复 17# kevinch
好像_ExcelWriteSheetFromArray($oExcel2,$aArray)的速度还可以!
静等高手出结果!

kevinch 发表于 2012-11-23 10:16:53

Local $sFilePath1 = FileOpenDialog("选择导入电子表格文件", @ScriptDir & "\", "Microsoft Excel 工作薄 (*.xls)", 1 + 2 + 4)
$oexcel=ObjCreate("excel.application") ;创建excel进程
$oexcel.visible=False;隐藏进程界面,可以提高处理速度
$wb=$oexcel.workbooks.open($sFilePath1);打开选定工作簿
$arr=$wb.worksheets(1).usedrange.value;提取选定工作簿第一个工作表内容到数组,au3在这里比较奇怪,得到的数组行列顺序与excel里是反的,这点需要注意
Dim $result;定义结果数组
$n=0;初始化结果数组列号起始值
For $i=0 To UBound($arr,2)-1 Step 2;每两列一个处理过程,循环处理目标数组,写入结果数组
        $result[$n]=$arr[$i]
        If $i<UBound($arr,2) Then $result[$n]=$arr[$i+1]
        $n+=1
Next
$wb.worksheets(2).range("a1").resize(UBound($result,2),UBound($result)).value=$result;结果数组写入工作簿第二个工作表
$wb.close(true);保存并关闭工作簿(参数true代表保存)
$oexcel.quit;退出excel进程
MsgBox(0,"","处理完成!")这个可以试一下啦,有注释,应该比较容易理解,没用udf

blue_dvd 发表于 2012-11-23 16:09:00

回复 19# kevinch
多谢指导!努力学习中。。。
页: 1 [2]
查看完整版本: Excel中“Sheet1”整理数据后写入“Sheet2”,结果Excel文件保存不了[已解决]