找回密码
 加入
搜索
查看: 10793|回复: 15

[GUI管理] 讀EXCEL單元格並建立數組(求其他的語法)

  [复制链接]
发表于 2012-7-18 17:05:30 | 显示全部楼层 |阅读模式
$oExcel=objget(@ScriptDir&'\TEST.XLS"); 現有的 EXL檔
$aArray = _ExcelReadArray($oExcel,2,6,17);從第2行開始,抓第6列到第17列共12組
;;;;$aArray[0]=第2行第6列的數據
================================
_ExcelReadArray($oExcel,2,6,17) 這一行 有沒有其他的寫法 像底下這種
可以不加#include <EXCEL.au3>
=============================================
with $o_Workbook
    .activesheet.columns("B").select
endwith
发表于 2012-7-18 20:40:07 | 显示全部楼层
#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)
这个试下
 楼主| 发表于 2012-7-18 21:53:55 | 显示全部楼层
測試  錯誤
;$arr=$xls.parent.application.transpose($arr)  ;取出来后行列是反的,如果需要的话,用这句正过来
這樣沒有數組
$arr[0]= 第2行第6列的數據
$arr[1]= 第2行第7列的數據
都不對
发表于 2012-7-19 09:59:45 | 显示全部楼层
excel中直接读取两个(含)以上的单元格内容得到的是二维数组,你用一维来引用肯定是不对的,_arraydisplay不是已经显示出来内容了吗?楼主还不知道如何引用??
发表于 2012-7-19 10:02:36 | 显示全部楼层
#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)
如果你只要一行,用这个

评分

参与人数 1金钱 +30 贡献 +5 收起 理由
tcpuuu + 30 + 5

查看全部评分

 楼主| 发表于 2012-7-19 12:52:53 | 显示全部楼层
本帖最后由 tcpuuu 于 2012-7-19 14:36 编辑


=============================
怎麼引用 ?  $arr[0]  應該要等於 7146
                 $arr[1] = 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[0][0]=7146
$arr[1][0]=22
$arr[2][0]
msgbox(0,"",$arr[0][0]);;;;;;;;;;如何引用 我不會引用

本帖子中包含更多资源

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

×
发表于 2012-7-22 22:12:05 | 显示全部楼层
可以试试用sqlite
 楼主| 发表于 2012-7-25 10:08:51 | 显示全部楼层
指定区域:
$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)
发表于 2012-7-25 12:00:09 | 显示全部楼层
设定格式是为写入数据做的准备,如果你想取得的是单元格的文本,可以试下
$arr=.cells(1,1).resize(1,10).formula

如果想取得显示文本,只能循环各个单元格,依次取.text
 楼主| 发表于 2012-7-25 14:08:37 | 显示全部楼层
本帖最后由 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文件 錯誤
发表于 2012-7-25 14:48:09 | 显示全部楼层
读取频率太高,如果刚好赶上正在修改单元格内容时就会出错,最好把处理过程写入excel那个工作表的worksheet_change事件里来处理,这样保证独立程序总控全局,就不容易出错了,外部程序这样控制确实不太好安全实现
 楼主| 发表于 2012-7-25 15:30:25 | 显示全部楼层
本帖最后由 tcpuuu 于 2012-7-25 15:32 编辑

刚好赶上正在修改单元格内容时就会出错  ===這個我有同感

拜託 kevinch 幫忙 寫1個實例來 看看好嗎?

我實在不了解你說的 敘述?
把处理过程写入excel那个工作表的worksheet_change事件里来处理
 楼主| 发表于 2012-7-25 17:03:54 | 显示全部楼层
本帖最后由 tcpuuu 于 2012-7-25 17:13 编辑

抱歉!這裡不應該討論 EXCEL  VBA

底下這個是 EXCEL  VBA程式碼    在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抓第二行的數值     這樣應該就不會  ( 刚好赶上正在修改单元格内容时就会出错)
发表于 2012-7-25 19:32:19 | 显示全部楼层
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
宏改成这样试下
 楼主| 发表于 2012-7-25 20:15:35 | 显示全部楼层
本帖最后由 tcpuuu 于 2012-7-26 21:41 编辑

Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Intersect(Target, [A2:R2]) Is Nothing Then Exit Sub
    Dim myPath As String
    myPath = ThisWorkbook.Path
    Open myPath & "\ABC.INI" For Output As #1
    Print #1, "[ABC]"
    Print #1, "1=" & Trim([A2])
    Print #1, "2=" & Trim([B2])
    Print #1, "3=" & Trim([C2])
    Print #1, "4=" & Trim([D2])
    Print #1, "5=" & Trim([E2])
    Print #1, "6=" & Trim([F2])
    Print #1, "7=" & Trim([G2])
    Print #1, "8=" & Trim([H2])
    Print #1, "9=" & Trim([I2])
    Print #1, "20=" & Trim([J2])
    Print #1, "11=" & Trim([K2])
    Print #1, "12=" & Trim([L2])
    Print #1, "13=" & Trim([M2])
    Print #1, "14=" & Trim([N2])
    Print #1, "15=" & Trim([O2])
    Print #1, "16=" & Trim([P2])
    Print #1, "17=" & Trim([Q2])
    Print #1, "18=" & Trim([R2])
    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

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-16 18:29 , Processed in 0.084827 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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