我需要将数据从 excel 工作表中提取到一个数组中,该数组将在使用 VBScript 作为脚本语言(快速测试专业版)的应用程序中使用。我们可以使用以下代码:
' ws must be an object of type Worksheet
Public Function GetArrayFromWorksheet(byref ws)
GetArrayFromWorksheet = ws.UsedRange.Value
End Function
myArray = GetArrayFromWorksheet(myWorksheet)
MsgBox "The value of cell C2 = " & myArray(2, 3)
一切都很好,但不幸的是,返回的数组不仅包含文字文本字符串,还包含日期、整数、双精度等类型的原语。数据被转换多次。
[编辑]示例:当输入=NOW()
一个单元格并将单元格格式设置hh:mm
为显示值17:45 时,上述方法返回一个类型的变量double
和一个类似41194.7400990741的值
以下解决方案效果更好:我可以使用该.Text
属性从单元格中获取文字文本,但它们仅适用于一个单元格,而不适用于一系列单元格。我不能像使用.Value
属性一样对数组执行此操作,因此我必须一次填充一个单元格:
Public Function GetArrayFromWorksheet_2(byref ws)
Dim range, myArr(), row, col
Set range = ws.UsedRange
' build a new array with the row / column count as upperbound
ReDim myArr(range.rows.count, range.columns.count)
For row = 1 to range.rows.count
For col = 1 to range.columns.count
myArr(row, col) = range.cells(row, col).text
Next
Next
GetArrayFromWorksheet_2 = myArr
End Function
但是哎哟......一个嵌套的for loop
. 是的,在大型工作表上,性能明显下降。
有人知道更好的方法吗?