讀EXCEL單元格並建立數組(求其他的語法)
$oExcel=objget(@ScriptDir&'\TEST.XLS"); 現有的 EXL檔$aArray = _ExcelReadArray($oExcel,2,6,17);從第2行開始,抓第6列到第17列共12組
;;;;$aArray=第2行第6列的數據
================================
_ExcelReadArray($oExcel,2,6,17) 這一行 有沒有其他的寫法 像底下這種
可以不加#include <EXCEL.au3>
=============================================
with $o_Workbook
.activesheet.columns("B").select
endwith #include <array.au3>
$xls=ObjGet(@ScriptDir&"\test.xls")
With $xls.activesheet
$arr=$xls.parent.application.intersect(.range(.cells(2,6),.cells(.rows.count,17)),.usedrange).value
;$arr=$xls.parent.application.transpose($arr);取出来后行列是反的,如果需要的话,用这句正过来
EndWith
$xls.close(False)
_ArrayDisplay($arr)这个试下 測試錯誤
;$arr=$xls.parent.application.transpose($arr);取出来后行列是反的,如果需要的话,用这句正过来
這樣沒有數組
$arr= 第2行第6列的數據
$arr= 第2行第7列的數據
都不對 excel中直接读取两个(含)以上的单元格内容得到的是二维数组,你用一维来引用肯定是不对的,_arraydisplay不是已经显示出来内容了吗?楼主还不知道如何引用?? #include <array.au3>
$xls=ObjGet(@ScriptDir&"\test.xls")
With $xls.activesheet
$arr=.cells(2,6).resize(1,12).value
;$arr=$xls.parent.application.transpose($arr);取出来后行列是反的,如果需要的话,用这句正过来
EndWith
$xls.close(False)
_ArrayDisplay($arr)如果你只要一行,用这个 本帖最后由 tcpuuu 于 2012-7-19 14:36 编辑
=============================
怎麼引用 ?$arr應該要等於 7146
$arr = 22
#include <array.au3>
$xls=ObjGet(@ScriptDir&"\test.xls")
With $xls.activesheet
$arr=.cells(2,6).resize(1,12).value
;$arr=$xls.parent.application.transpose($arr);取出?后行列是反的,如果需要的?,用?句正??
EndWith
$xls.close(False)
_ArrayDisplay($arr)
for $i= 0 To 11
msgbox(0,"",$arr[$i]);;;;;;;;;;如何引用 我不會引用
GUICtrlSetData($CEL[$i],$arr[$i]) ;把數據寫入控件
next
==========================
我會了 要這樣引用
$arr=7146
$arr=22
$arr
msgbox(0,"",$arr);;;;;;;;;;如何引用 我不會引用 可以试试用sqlite 指定区域:
$oExcelApp.workbooks(1).activesheet.range("a1:j1").numberformatlocal="@"
第一行:
$oExcelApp.workbooks(1).activesheet.rows(1).numberformatlocal="@"
=======================================================
請問 kevinch 先轉文本格式 再抓取 要如何敘述? 底下這樣是錯誤
$oExcelApp.workbooks(1).activesheet.range("a1:j1").numberformatlocal="@"
$xls=objget(@ScriptDir&"\book.xls")
With $xls.activesheet
$arr=.cells(1,1).resize(1,10).value
;$arr=$xls.parent.application.transpose($arr);加這句直的變橫
EndWith
_ArrayDisplay($arr) 设定格式是为写入数据做的准备,如果你想取得的是单元格的文本,可以试下
$arr=.cells(1,1).resize(1,10).formula
如果想取得显示文本,只能循环各个单元格,依次取.text 本帖最后由 tcpuuu 于 2012-7-25 15:37 编辑
$xls=ObjGet(@ScriptDir&"\test.xls")
這一行有其他寫法嗎?
=======================
$xls=objget(@ScriptDir&"\book.xls")
With $xls.activesheet
$arr=.cells(1,1).resize(1,10).value
EndWith
=========================
我每1秒要更新1次(excel單元格的數據 是連接網路的遠端存取 時常的變動)
過程中只要做了其他電腦操作動作(例如開流覽器 開起其他程式 開其他.txt .xxx檔)
便出現 .value (表態式 錯誤) 或 With $xls.activesheet 沒有這個book.xls文件 錯誤 读取频率太高,如果刚好赶上正在修改单元格内容时就会出错,最好把处理过程写入excel那个工作表的worksheet_change事件里来处理,这样保证独立程序总控全局,就不容易出错了,外部程序这样控制确实不太好安全实现 本帖最后由 tcpuuu 于 2012-7-25 15:32 编辑
刚好赶上正在修改单元格内容时就会出错===這個我有同感
拜託 kevinch 幫忙 寫1個實例來 看看好嗎?
我實在不了解你說的 敘述?
把处理过程写入excel那个工作表的worksheet_change事件里来处理 本帖最后由 tcpuuu 于 2012-7-25 17:13 编辑
抱歉!這裡不應該討論 EXCELVBA
底下這個是 EXCELVBA程式碼 在A1輸入資料, B1立即自動顯示出當日日期
=============================================
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value = "" Then
Worksheets("Sheet1").Cells(Target.Row, 2).Value = Target
Else
Worksheets("Sheet1").Cells(Target.Row, 2).Value = Now
End If
End If
End Sub
================================================
可幫我 改成 如果A1 到J1 的數值有變動便將變動後的數值寫入A2 到J2
我再用AU3抓第二行的數值 這樣應該就不會( 刚好赶上正在修改单元格内容时就会出错) Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, R As Range
Set Rng = Intersect(Target, Range("a1:j1"))
If Not Rng Is Nothing Then
For Each R In Rng
If R.Value = "" Then
R.Offset(1).Value = ""
Else
R.Offset(1).Value = "事件写入值"
End If
Next R
End If
End Sub宏改成这样试下 本帖最后由 tcpuuu 于 2012-7-26 21:41 编辑
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, ) Is Nothing Then Exit Sub
Dim myPath As String
myPath = ThisWorkbook.Path
Open myPath & "\ABC.INI" For Output As #1
Print #1, ""
Print #1, "1=" & Trim()
Print #1, "2=" & Trim()
Print #1, "3=" & Trim()
Print #1, "4=" & Trim()
Print #1, "5=" & Trim()
Print #1, "6=" & Trim()
Print #1, "7=" & Trim()
Print #1, "8=" & Trim()
Print #1, "9=" & Trim()
Print #1, "20=" & Trim()
Print #1, "11=" & Trim()
Print #1, "12=" & Trim()
Print #1, "13=" & Trim()
Print #1, "14=" & Trim()
Print #1, "15=" & Trim()
Print #1, "16=" & Trim()
Print #1, "17=" & Trim()
Print #1, "18=" & Trim()
Close #1
End Sub
=============================
請問 kevinch (excel VBA)1=到 18= 這段寫成 用 循環的(怎麼寫?)
for $i = 1 to 18
next
========================
我會了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, AU3 比較簡單易懂
For i = 1 To 18
Print #1, i & "=" & Trim(Cells(2, i))
Next
页:
[1]
2