gaoheihei 发表于 2011-7-25 18:34:55

请问如何读取excel里合并单元格的值

刚刚接触AutoIt,正在学习使用excel函数,但没有找到读取合并单元格的值的函数。只能读取第一个单元格的值,其他被合并的单元格值均为空,如何解决,求高手帮助!求!跪求!!!

kevinch 发表于 2011-7-25 22:27:28

给出你的代码看下,合并单元格里的其他单元格值是空的是正常,只有左上角的单元格是有值的。

gaoheihei 发表于 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通过这种方式读取的路径,因为单元格内容为空,所以路径总是不正确的,请问怎么解决?谢谢……

kevinch 发表于 2011-7-26 11:32:05

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

看楼主喜欢哪种啦,确定后可以帮你弄一下。

gaoheihei 发表于 2011-7-26 13:24:03

第二种方式我也考虑过,但是kevinch 请看第三列,这些本来就是空值,而不是因为合并导致的空值,如果用第二种方法,就没法处理了。如果用第一种方法,该怎么做啊?

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没有你的主程序,我这里没办法测试,你测试一下看看。

gaoheihei 发表于 2011-7-26 16:29:30

谢谢哈,完全可以!好厉害!这个最关键的问题解决了,功能也差不多完成了,能及时的回复太感谢了!!!{:face (468):}

pdp320921 发表于 2011-7-26 19:52:42

学习了,强人啊

auhj887 发表于 2011-7-31 16:40:20

{:face (356):}

casisi 发表于 2011-8-3 09:05:15

貌似很厉害的样子,记号一下我很快也会用到

kaidashi 发表于 2011-8-3 14:37:11

我也在弄,现在也可以了。
页: [1]
查看完整版本: 请问如何读取excel里合并单元格的值