找回密码
 加入
搜索
查看: 6759|回复: 16

[AU3基础] 关于EXCEL数据拆分问题[已解决]

  [复制链接]
发表于 2015-11-17 14:35:44 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2015-11-18 17:11 编辑
#include <Excel.au3>
#include <Excel.au3>
#include <array.au3>

Local $oExcel = _ExcelBookOpen(@ScriptDir & "\Data.xlsx")
$avArray = _ExcelReadSheetToArray($oExcel)
Local $str, $i, $dt, $avArray

_ArrayDisplay($avArray)

                For $i = 2 To UBound($avArray) - 1

                        $str = StringSplit($avArray[$i], "{TAB}", 1)
                        $xName = $str[1]
                        MsgBox(0, "test", $xName)
                Next



_ExcelBookSaveAs($oExcel, @ScriptDir & "\temp.xls", "xls", 0, 1)
_ExcelBookClose($oExcel)
$str = StringSplit($avArray[$i], "{TAB}", 1)  之前我用.CSV格式用逗号拆分,现在先改成execl的默认格式,不知道如何拆分了,请问默认分隔符是什么呢? 另外能不能让Local $oExcel = _ExcelBookOpen(@ScriptDir & "\Data.xlsx") 不要弹出excel表格,后台打开就好, 请帮忙指点一下。
 楼主| 发表于 2015-11-17 17:35:36 | 显示全部楼层
#include <Excel.au3>
#include <array.au3>
Local $str, $i, $dt, $avArray
Local $oExcel = _ExcelBookOpen(@ScriptDir & "\Data.xlsx")
$avArray = _ExcelReadSheetToArray($oExcel)


_ArrayDisplay($avArray)

For $i = 2 To UBound($avArray) - 1

   $xName = $avArray[$i][1]
   $xNo = $avArray[$i][2]
   $xErp = $avArray[$i][3]

        MsgBox(0, "test", $xName & "-" & $xNo & "-" & $xErp)



Next

_ExcelBookSaveAs($oExcel, @ScriptDir & "\temp.xls", "xls", 0, 1)
_ExcelBookClose($oExcel)
测试了一下 这样也可以读取每个值,希望高人指点一下,有没有更加好的代码。
发表于 2015-11-17 18:02:34 | 显示全部楼层
回复 2# heroxianf

晚點給你代碼 根本不用管 分隔符號是甚麼
 楼主| 发表于 2015-11-17 18:04:34 | 显示全部楼层
回复 3# kk_lee69

非常谢谢,那晚上我等着哦。
发表于 2015-11-17 21:06:19 | 显示全部楼层
本帖最后由 kk_lee69 于 2015-11-17 21:24 编辑

回复 4# heroxianf

$eExcel = _ExcelBookOpen($eFPath,0,True) ;打開EXCEL表
With $eExcel.ActiveSheet ;Worksheets("")  如果要用工作表名稱 就改成這邊
     $eExcelArray=.range("a1").currentregion.value;第一行讀取
   $eExcelArray=.application.transpose($eExcelArray) ;行列互換
   ;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ExcelBookClose($eExcel, 0, 0)
$eExcel=0


$eExcelArray 就是你要的陣列(數組)

_ArrayDisplay($eExcelArray) 看一下就知道
 楼主| 发表于 2015-11-17 21:53:05 | 显示全部楼层
回复 5# kk_lee69


    你的这种写法有什么学习资料吗?最近要学习下Excel
发表于 2015-11-17 22:05:12 | 显示全部楼层
回复 6# heroxianf

VBA

打開 EXCEL 後 就是 VBA 的寫法

怎麼用其實我也不知道  你可以找一下 作者 kevinch 兄 回答的文章
他是 EXCEL VBA 的第一把交椅
 楼主| 发表于 2015-11-17 22:42:20 | 显示全部楼层
回复 7# kk_lee69


    好的   多了解一下。
发表于 2015-11-18 12:06:24 | 显示全部楼层
实际上EXCEL操作时效率奇慢无比啊,真奇怪
 楼主| 发表于 2015-11-18 13:28:41 | 显示全部楼层
回复 9# wwwmhk

确实很慢,还不如直接操作CSV格式。
发表于 2015-11-18 14:15:38 | 显示全部楼层
回复 10# heroxianf

老實說 不知道哪裡慢??? 我怎麼用起來很快呢??

能舉實際例子 測試看看嗎
发表于 2015-11-18 14:43:46 | 显示全部楼层
本帖最后由 kk_lee69 于 2015-11-18 14:48 编辑

回复 10# heroxianf
開啟 幾百筆的資料 變成陣列

5百多毫秒 會算慢嗎??

開啟 13000筆資料 每筆資料 有 A~Z 的欄位資料


所以儲存格是 13000*26 個儲存格

轉成數組  

3355毫秒  算慢嗎??
 楼主| 发表于 2015-11-18 16:25:34 | 显示全部楼层
回复 12# kk_lee69

我正打算利用空余时间看下VBA,如果你能提供一份你的列子,不胜感激啊。
发表于 2015-11-18 16:47:39 | 显示全部楼层
回复 13# heroxianf

#include <Excel.au3>
#include <Array.au3>
DIM  $eExcelArray
$begin =TimerInit()
$eExcel = _ExcelBookOpen(@ScriptDir&"\1.XLS",0,True) ;打開EXCEL表
With $eExcel.ActiveSheet ;Worksheets("")  如果要用工作表名稱 就改成這邊
     $eExcelArray=.range("a1").currentregion.value;第一行讀取
   $eExcelArray=.application.transpose($eExcelArray) ;行列互換
   ;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ExcelBookClose($eExcel, 0, 0)
$eExcel=0

MsgBox(0,"",TimerDiff($begin))
_ArrayDisplay($eExcelArray)


文件在這 你可以測試看看

本帖子中包含更多资源

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

×
 楼主| 发表于 2015-11-18 17:12:14 | 显示全部楼层
回复 14# kk_lee69


    非常谢谢,看来操作EXCEL表格  只能用VBA来,这样速度才能飙升。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 22:16 , Processed in 0.087318 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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