vbs函数读取excel中的数据,存储到dictionary并返回。在外部用dictionary变量操作数据。
现在我的问题是,当我把数据存到dictionary或list中以后,在外部不能获取其数据,代码如下:Dimretsetret=getExecuteFlowFromExce...
现在我的问题是,当我把数据存到dictionary或list中以后,在外部不能获取其数据,代码如下:
Dim ret
set ret= getExecuteFlowFromExcel("C:\国航框架\业务项数据文件\ACE自动化测试数据管理框架.xls","业务集")
'msgbox ret.count
For i=0 To ret.count-1
msgbox ret.item(i)
Next
Function getExecuteFlowFromExcel(ByVal exclPath,ByVal sheetName)
Dim objExcel,objExcelBook,objExcelSheet,dicRetContainer
Dim intTotalRow,intTotalCol
Set objExcel=CreateObject("excel.application")'定义excel对象
objExcel.Visible=False
objExcel.DisplayAlerts = False
Set objExcelBook=objExcel.Workbooks.Open(exclPath)'获取excel,实例化
Set objExcelSheet=objExcelBook.Sheets(sheetName) '获取sheet
intTotalRow=objExcelSheet.usedRange.Rows.Count '获取当前sheet的总行数,包含空行
intTotalCol=objExcelSheet.usedRange.Columns.Count '获取当前sheet的总列数,包含空行
myRow=1'从excel第一行开始遍历
myColumn=1
' Set dicRetContainer=CreateObject("scripting.dictionary")'初始化返回字典对象容器
Set dicRetContainer=CreateObject("system.collections.arraylist")
For myRow=1 to intTotalRow
For myColumn=1 to intTotalCol
If objExcelSheet.cells(myRow,myColumn)="y" Then '如果发现为y
moveNextCol=1
While objExcelSheet.cells(myRow,moveNextCol)<>"" '如果发现当前行不为空
dicRetContainer.add(objExcelSheet.cells(myRow,moveNextCol))
moveNextCol=moveNextCol+1 '当前列往后移
Wend
End if
Next
next
objExcelBook.Close
objExcel.Quit
set objExcel=nothing
set getExecuteFlowFromExcel=dicRetContainer
end function 展开
Dim ret
set ret= getExecuteFlowFromExcel("C:\国航框架\业务项数据文件\ACE自动化测试数据管理框架.xls","业务集")
'msgbox ret.count
For i=0 To ret.count-1
msgbox ret.item(i)
Next
Function getExecuteFlowFromExcel(ByVal exclPath,ByVal sheetName)
Dim objExcel,objExcelBook,objExcelSheet,dicRetContainer
Dim intTotalRow,intTotalCol
Set objExcel=CreateObject("excel.application")'定义excel对象
objExcel.Visible=False
objExcel.DisplayAlerts = False
Set objExcelBook=objExcel.Workbooks.Open(exclPath)'获取excel,实例化
Set objExcelSheet=objExcelBook.Sheets(sheetName) '获取sheet
intTotalRow=objExcelSheet.usedRange.Rows.Count '获取当前sheet的总行数,包含空行
intTotalCol=objExcelSheet.usedRange.Columns.Count '获取当前sheet的总列数,包含空行
myRow=1'从excel第一行开始遍历
myColumn=1
' Set dicRetContainer=CreateObject("scripting.dictionary")'初始化返回字典对象容器
Set dicRetContainer=CreateObject("system.collections.arraylist")
For myRow=1 to intTotalRow
For myColumn=1 to intTotalCol
If objExcelSheet.cells(myRow,myColumn)="y" Then '如果发现为y
moveNextCol=1
While objExcelSheet.cells(myRow,moveNextCol)<>"" '如果发现当前行不为空
dicRetContainer.add(objExcelSheet.cells(myRow,moveNextCol))
moveNextCol=moveNextCol+1 '当前列往后移
Wend
End if
Next
next
objExcelBook.Close
objExcel.Quit
set objExcel=nothing
set getExecuteFlowFromExcel=dicRetContainer
end function 展开
1个回答
展开全部
Dim objExcel,objExcelBook,objExcelSheet,dicRetContainer
写在函数里面 ,只能在函数里面处理
需要在函数外面处理的,
把Dim objExcel,objExcelBook,objExcelSheet,dicRetContainer
写在函数外面
如果还不行,就要检查函数模块是不是公共模块了
写在函数里面 ,只能在函数里面处理
需要在函数外面处理的,
把Dim objExcel,objExcelBook,objExcelSheet,dicRetContainer
写在函数外面
如果还不行,就要检查函数模块是不是公共模块了
追问
缺少对象
Line (8): "msgbox dicRetContainer.item(i)".
不行,即使用全局也不行,除非是把这两个语句去掉
objExcelBook.Close
objExcel.Quit
我不理解的是,我已经把数据放到dictionary/list里面了,为什么在这个excel关闭以后这些数据就会没了。作用域应该是不一样的啊。
追答
你在哪个excel编程的 dictionary/list 在excel关闭后 内存就销毁了
所以你永远得不到数据
你可以建立一个临时的excel,ini,text 等类似的文件来存储数据
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询