找回密码
 加入
搜索
楼主: blue_dvd

[效率算法] Excel中“Sheet1”整理数据后写入“Sheet2”,结果Excel文件保存不了[已解决]

  [复制链接]
 楼主| 发表于 2012-11-22 20:35:25 | 显示全部楼层
回复  blue_dvd
刚用一楼的附件测试了,正常的啊!
kevinch 发表于 2012-11-22 19:05

如果在写Excel表格中有个进度条就好了,不知道能否实现?
发表于 2012-11-23 08:42:09 | 显示全部楼层
回复 16# blue_dvd
其实用数组来转可能会快些,有空弄下,应该不至于那么慢,毕竟range类的操作最耗时间;进度条的话,au3不是可以很方便的插入
 楼主| 发表于 2012-11-23 09:22:21 | 显示全部楼层
回复 17# kevinch
好像
_ExcelWriteSheetFromArray($oExcel2,$aArray)
的速度还可以!
静等高手出结果!
发表于 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[2][Round((UBound($arr,2)+1)/2)]  ;定义结果数组
$n=0  ;初始化结果数组列号起始值
For $i=0 To UBound($arr,2)-1 Step 2  ;每两列一个处理过程,循环处理目标数组,写入结果数组
        $result[0][$n]=$arr[0][$i]
        If $i<UBound($arr,2) Then $result[1][$n]=$arr[0][$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
 楼主| 发表于 2012-11-23 16:09:00 | 显示全部楼层
回复 19# kevinch
多谢指导!努力学习中。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 01:43 , Processed in 0.072976 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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