找回密码
 加入
搜索
查看: 4238|回复: 10

[AU3基础] 请问如何读取excel里合并单元格的值

  [复制链接]
发表于 2011-7-25 18:34:55 | 显示全部楼层 |阅读模式
刚刚接触AutoIt,正在学习使用excel函数,但没有找到读取合并单元格的值的函数。只能读取第一个单元格的值,其他被合并的单元格值均为空,如何解决,求高手帮助!求!跪求!!!
发表于 2011-7-25 22:27:28 | 显示全部楼层
给出你的代码看下,合并单元格里的其他单元格值是空的是正常,只有左上角的单元格是有值的。
 楼主| 发表于 2011-7-26 10:53:18 | 显示全部楼层

是这样的,我有一个excel的文件清单,需要读出前三列来组成文件路径,找到这个文件后,读取文件的版本和最后修改时间,跟excel表格里的文件和最后时间做比较。excel表的形式如上图。代码如下:
Func _VerifyFile($installFilePath, $listFilePath)
        $oExcel = _ExcelBookOpen($listFilePath)
        If @error = 2 Then
                MsgBox(0, "Error!", "文件清单不存在 - 干什么吃的你!!")
                Exit
        EndIf
        $aArray = _ExcelReadSheetToArray($oExcel)
        $versionColu = 6
        $modifyTimeColu = 7
        For $row = 2 To UBound($aArray)-1
                $verifyFilePath = $installFilePath
                For $col = 1 To 3
                        $verifyFilePath = $verifyFilePath & '\' & $aArray[$row][$col]
                        If StringInStr(FileGetAttrib($verifyFilePath), "D") Then 
                                ContinueLoop
                        Else
                                _CompareVersion($aArray[$row][$versionColu], $verifyFilePath)
                                ;_CompareModifyTime($aArray[$j][$versionColu], FileGetTime($verifyFilePath))
                        EndIf
                Next
        Next
EndFunc
通过这种方式读取的路径,因为单元格内容为空,所以路径总是不正确的,请问怎么解决?谢谢……

本帖子中包含更多资源

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

×
发表于 2011-7-26 11:32:05 | 显示全部楼层
有两种方式处理:
1. 临时对excel进行处理,将合并单元格解散,并且每个合并区域内的单元格等于左上角单元格内容,然后再读入数组进行处理,对excel文件使用关闭但不保存
2. 用变量记录当前列当前行的内容,如果当前数组项是空白则以变量记录值为准,这种不需要对原表格进行临时操作

看楼主喜欢哪种啦,确定后可以帮你弄一下。
 楼主| 发表于 2011-7-26 13:24:03 | 显示全部楼层
第二种方式我也考虑过,但是kevinch 请看第三列,这些本来就是空值,而不是因为合并导致的空值,如果用第二种方法,就没法处理了。如果用第一种方法,该怎么做啊?
发表于 2011-7-26 13:47:24 | 显示全部楼层
Func _VerifyFile($installFilePath, $listFilePath)
        $oExcel = _ExcelBookOpen($listFilePath)
        If @error = 2 Then
                MsgBox(0, "Error!", "文件清单不存在 - 干什么吃的你!!")
                Exit
                EndIf
                With $oExcel
                        For $Rng In .activesheet.usedrange
                                If $rng.mergecells=True Then
                                        $rng.select
                                        $rng.parent.parent.parent.selection.unmerge
                                        $rng.parent.parent.parent.selection.cells.value=$rng.value
                                EndIf
                        Next
                EndWith
        $aArray = _ExcelReadSheetToArray($oExcel)
        $versionColu = 6
        $modifyTimeColu = 7
        For $row = 2 To UBound($aArray)-1
                $verifyFilePath = $installFilePath
                For $col = 1 To 3
                        $verifyFilePath = $verifyFilePath & '\' & $aArray[$row][$col]
                        If StringInStr(FileGetAttrib($verifyFilePath), "D") Then 
                                ContinueLoop
                        Else
                                _CompareVersion($aArray[$row][$versionColu], $verifyFilePath)
                                ;_CompareModifyTime($aArray[$j][$versionColu], FileGetTime($verifyFilePath))
                        EndIf
                Next
        Next
EndFunc
没有你的主程序,我这里没办法测试,你测试一下看看。

评分

参与人数 1金钱 +20 收起 理由
gaoheihei + 20

查看全部评分

 楼主| 发表于 2011-7-26 16:29:30 | 显示全部楼层
谢谢哈,完全可以!好厉害!这个最关键的问题解决了,功能也差不多完成了,能及时的回复太感谢了!!!
发表于 2011-7-26 19:52:42 | 显示全部楼层
学习了,强人啊
发表于 2011-7-31 16:40:20 | 显示全部楼层
发表于 2011-8-3 09:05:15 | 显示全部楼层
貌似很厉害的样子,记号一下我很快也会用到
发表于 2011-8-3 14:37:11 | 显示全部楼层
我也在弄,现在也可以了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-14 14:13 , Processed in 0.105098 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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