0

我正在读取大型 xml 文件(600mb)并使用 excel 文件检查值。我正在使用几个循环并且它需要时间来执行。我想过将一些循环替换为条件语句

像这样:

此函数将工作表名称作为字符串并尝试查找工作表(对于所有 xml 节点)

function searchValue( val, rng, worksheet ) 
    set objWorksheet = nothing
    For Iter = 1 To objWorkbook.Worksheets.Count
        If objWorkbook.Worksheets(Iter).Name = worksheet then
            Set objWorksheet = objWorkbook.Worksheets(Iter)
            exit for
        end if
    next

如果我使用选择案例并传递表格名称的表格编号,如下所示

sub getSheetNumber( worksheet)
    select case worksheet
    case "A"
        getSheetNumber = 1
    case "B"
        getSheetNumber = 2
    case "C"
        getSheetNumber = 3
    case "D"
        getSheetNumber = 4
    case "E"
        getSheetNumber = 5
    case "F"
        getSheetNumber = 6
    case else
        getSheetNumber = worksheet

这是一个好主意还是有其他方法可以避免循环

4

3 回答 3

2

可以计算字母到数字的映射:

>> For Each c In Split("A B C D E F")
>>     WScript.Echo c, Asc(c) - Asc("A") + 1
>> Next
>>
A 1
B 2
C 3
D 4
E 5
F 6
于 2013-11-13T08:53:25.660 回答
1

除了计算值之外的另一个选择是使用字典:

Set getSheetNumber = CreateObject("Scripting.Dictionary")
getSheetNumber.Add "A", 1
getSheetNumber.Add "B", 2
getSheetNumber.Add "C", 3
getSheetNumber.Add "D", 4
getSheetNumber.Add "E", 5
getSheetNumber.Add "F", 6

...

WScript.Echo getSheetNumber(worksheet)

Select..Case当你想实现一个简单的键值映射时,使用是多余的。

于 2013-11-13T12:58:11.483 回答
0

假设这是您的要求:

此函数将工作表名称作为字符串并尝试查找工作表(对于所有 xml 节点)

为什么不使用 Excel 本身来查找工作表?

function searchValue(val, rng, worksheet) 
    set objWorksheet = nothing
    On error resume next
    Set objWorksheet = objWorkbook.Worksheets(worksheet)
    On error goto 0

    If objWorksheet Is Nothing then
         ' Error! worksheet not found
    End if

    <..>
于 2013-11-13T16:42:55.953 回答