找回密码
 加入
搜索
查看: 910|回复: 8

[AU3基础] 求助 AUTOIT无法转换EXCEL数据为 数组 (一直使用的语法失效)[已解决]

[复制链接]
发表于 2022-2-11 17:37:21 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2022-2-12 21:35 编辑

工作上 经常会需要将EXCEL 转为数组  


一直以来使用的都很好的语法 现在遇到某个 EXCEL 档案 突然失效了


求助 修改下面语法  让他可以将EXCEL 数据转成数组





#include <array.au3>
#include <Date.au3>
#include <Excel.au3>


 $eExcel = _ExcelBookOpen("C:\Users\WORKA\Documents\2021年\DSC導入相關資料\菲律賓\Sales.xls",0,True) ;打開EXCEL表
;With $eExcel.worksheets("Sales Register");worksheets("")  ActiveSheet
 With $eExcel.ActiveSheet;worksheets("")  ActiveSheet 
  ;$eTempArray=$eExcel.application.intersect(.range("a1").currentregion,.range("a1").currentregion.offset(1)).value ;第一行不讀取
  $eTempArray=.range("a1").currentregion.value;第一行讀取
  
  ;$eTempArray=.application.transpose($eTempArray) ;行列互換
  ;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
 _ExcelBookClose($eExcel, 0, 0)
 $eExcel=0
 ;_ArrayDisplay($eTempArray)
 DIM $eExcelArray[UBound($eTempArray,2)][UBound($eTempArray)]
 ;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n=0 To UBound($eTempArray)-1
  For $i=0 To UBound($eTempArray,2)-1
   $eExcelArray[$i][$n]=StringReplace($eTempArray[$n][$i],"'","")
  Next
 Next


 _ArrayDisplay($eExcelArray)










本帖子中包含更多资源

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

×
发表于 2022-2-11 18:14:58 | 显示全部楼层
老革命碰到新问题??
发表于 2022-2-11 18:17:44 | 显示全部楼层
你的上一贴为何不结贴?别人帮忙至少道声谢吧~
https://www.autoitx.com/forum.ph ... amp;fromuid=7644923
发表于 2022-2-11 18:20:16 | 显示全部楼层

$Excelconn = ObjCreate("ADODB.Connection")
$Excelconn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $excel & ";Extended Properties='Excel 12.0'")
$eExcelArray = $Excelconn.Execute("SELECT * FROM [" & $SList1 & "]").GetRows
_ArrayDisplay($eExcelArray, "显示全表  ", "", "64", "|", $Rtn1)
$Excelconn.Close


 楼主| 发表于 2022-2-11 20:22:23 | 显示全部楼层
afan 发表于 2022-2-11 18:17
你的上一贴为何不结贴?别人帮忙至少道声谢吧~
https://www.autoitx.com/forum.php?mod=redirect&goto=fi ...

恩~~  SORRY

最近公司 更換 ERP 系統 太過忙碌  幾乎沒上線 ~~  馬上處理

不好意思~~
 楼主| 发表于 2022-2-11 20:26:36 | 显示全部楼层

你用 資料庫 概念 讀取資料??   學到一招........

待會測試看看~~

VBA  好像會受到 某些 特殊空白 或者 資料的影響
发表于 2022-2-12 03:49:58 | 显示全部楼层
#include <array.au3>
#include <Date.au3>
#include <Excel.au3>

$Excel1 = "C:\temp\Sales.xls" ;EXCEL檔案路徑
$Excelconn = ObjCreate("ADODB.Connection") ;需要先安装AccessDatabaseEngine
;$Excelconn.open("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="& $Excel1 &";" & "Extended Properties=""Excel 8.0;HDR=Yes;"";")
$Excelconn.open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $excel1 & ";Extended Properties='Excel 12.0'")
$SList1 = "Sheet" ;設定指定開啟的活頁簿名稱
$eExcelArray = $Excelconn.Execute("SELECT * FROM ["&$SList1&"$]").GetRows
$Excelconn.Close
_ArrayDisplay($eExcelArray, "显示全表  ", "", "64", "|")

環境:WIN-7-64bit,OFFICE-2003 , Microsoft Access Database Engine 2010 可轉散發套件
測試ok,感謝 chzj589 大大提供代碼
 楼主| 发表于 2022-2-12 21:30:39 | 显示全部楼层
本帖最后由 kk_lee69 于 2022-2-12 21:33 编辑
yohoboy 发表于 2022-2-12 03:49
#include
#include
#include

這是一個解法  

後來經過研究 VBA 發現了 

$eTempArray=.range("a1").currentregion.value;第一行讀取

這個語法會受到旁邊全部都是空白的影響  導致連續的區塊範圍 被切斷
因此 讀取不到資料  需要改寫

將上面的語句 改為
$eTempArray=.range("A1",.Cells(.Range("A1").SpecialCells(11).Row,.Range("A1").SpecialCells(11).Column)) .value

這樣 就可以了~~~~

如果 還有人有其他語法  也歡迎提供~~~ 感謝!!

发表于 2022-2-24 10:26:02 | 显示全部楼层
本帖最后由 chzj589 于 2022-2-24 10:28 编辑
kk_lee69 发表于 2022-2-12 21:30
這是一個解法  

後來經過研究 VBA 發現了 


#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
; 创建应用对象并打开示例工作簿
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead 示例", "创建 Excel 应用对象发生错误." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\Sales.xls");$FExcel);
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
Local $iRowsB = $oWorkbook.ActiveSheet.UsedRange.Columns.Count ;‘当前工作表中已使用的列数
Local $iRo=$iRowsA;+2
Local $L1
        Global $sText1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH']
        For $i = 0 To $iRowsB - 1
                $L1 = $sText1[$i] ;& '|'
        Next
        ;MsgBox($MB_SYSTEMMODAL, "", $L1)
If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead 示例", "打开工作簿发生错误 '" &  @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oExcel)
    Exit
EndIf
; 读取指定工作簿的表 1的单元格公式
; *****************************************************************************
Local $aResult = _Excel_RangeRead($oWorkbook, Default, "A1:"& $L1 &$iRo, 1);&$DEFAULT &$iR, 1)&$iRowsAA
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead 示例 2", "读工作簿失败." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead 示例 2", "成功读取数据." & @CRLF & "点击 < 确定 > 按钮显示表 1 单元格 A1:"& $L1 & $iRo & @CRLF &"行数=" &$iRo& @CRLF &"列数=" &$iRowsB, 2)
_ArrayDisplay($aResult, "Excel UDF: _Excel_RangeRead 示例 2 - 表 1的单元格 A1:"& $L1 & $iRo)
$oWorkbook.Close
$oExcel.quit ;退出excel进程

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-3 18:52 , Processed in 0.088584 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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