求助 AUTOIT无法转换EXCEL数据为 数组 (一直使用的语法失效)[已解决]
本帖最后由 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
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
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)
老革命碰到新问题?? 你的上一贴为何不结贴?别人帮忙至少道声谢吧~
https://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=72830&pid=755583&fromuid=7644923
$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
afan 发表于 2022-2-11 18:17
你的上一贴为何不结贴?别人帮忙至少道声谢吧~
https://www.autoitx.com/forum.php?mod=redirect&goto=fi ...
恩~~SORRY
最近公司 更換 ERP 系統 太過忙碌幾乎沒上線 ~~馬上處理
不好意思~~ chzj589 发表于 2022-2-11 18:20
你用 資料庫 概念 讀取資料?? 學到一招........
待會測試看看~~
VBA好像會受到 某些 特殊空白 或者 資料的影響 #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 大大提供代碼 本帖最后由 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
這樣 就可以了~~~~
如果 還有人有其他語法 也歡迎提供~~~ 感謝!!
本帖最后由 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进程
页:
[1]