kk_lee69 发表于 2022-2-11 17:37:21

求助 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)










chzj589 发表于 2022-2-11 18:14:58

老革命碰到新问题??

afan 发表于 2022-2-11 18:17:44

你的上一贴为何不结贴?别人帮忙至少道声谢吧~
https://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=72830&pid=755583&fromuid=7644923

chzj589 发表于 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


kk_lee69 发表于 2022-2-11 20:22:23

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

恩~~SORRY

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

不好意思~~

kk_lee69 发表于 2022-2-11 20:26:36

chzj589 发表于 2022-2-11 18:20


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

待會測試看看~~

VBA好像會受到 某些 特殊空白 或者 資料的影響

yohoboy 发表于 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 大大提供代碼

kk_lee69 发表于 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

這樣 就可以了~~~~

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

chzj589 发表于 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进程

页: [1]
查看完整版本: 求助 AUTOIT无法转换EXCEL数据为 数组 (一直使用的语法失效)[已解决]