如何从目录中的图像创建多维数组?

时间:2013-10-30 17:20:20

标签: vba

考虑以下tifs目录:

EX0008-001.tif
EX0091-001.tif
EX0091-002.tif
EX0091-003.tif
EX0777-001.tif
EX0777-002.tif

我需要编写一个VBA脚本来编译一个特定格式的输入文件。每个TIF图像都构造为DOCUMENT-PAGE,因此EX0008-001.tif是文档EX0008的第1页的TIF图像。为了编译输入文件,我首先需要将图像放入多维数组中,如下所示:

Array(
  [EX0008] = Array (001)
  [EX0091] = Array (001, 002, 003)
  [EX0777] = Array (001, 002) 
)

为此,我必须使用VBA。问题是我只对php有所了解。我一直在寻找一个关于如何在VBA中解决我的问题的明确指南但是不成功。来自@AutomatedChaos的示例代码对我来说太先进了。

Set objShell = CreateObject("WScript.Shell") 
currentDirectory = objShell.CurrentDirectory 

Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder(currentDirectory) 

Set TifCollection = CreateObject("System.Collections.ArrayList") 

For each objFile in objFolder.Files 
    If objFso.GetExtensionName (objFile.Path) = "tif" Then 
        fileNumber = Split(objFile.Name, "-")(0) 
        pageNumber = Split(objFile.Name, "-")(1) 

    If Not TifCollection(fileNumber).Exists Then 
        Set TifCollection.Item(fileNumber) =  CreateObject("System.Collections.ArrayList") 
    End If 

    TifCollection.Item(fileNumber).Add pageNumber 
    End If 
Next

由于这也是我对VBA的第一次介绍,我希望尽可能保持我的代码简单明了。你能帮我把上面的代码搞定吗?我不明白我得到的错误消息(Class doesn't support Automation: TifCollection),因为我将TifCollection定义为数组,而不是类?

1 个答案:

答案 0 :(得分:2)

你不能在VBA中使用.Net类,除非它们公开了COM接口,因此你看到了错误。

VBA直接支持数组,但它们只是整数索引数组。您需要使用Scripting.Dictionary对象。以下内容未经过测试,但应该接近您的目标。

Set objShell = CreateObject("WScript.Shell") 
currentDirectory = objShell.CurrentDirectory 

Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder(currentDirectory) 

Set TifCollection = CreateObject("Scripting.Dictionary") 

For each objFile in objFolder.Files 
    If objFso.GetExtensionName (objFile.Path) = "tif" Then 
        fileNumber = Split(objFile.Name, "-")(0) 
        pageNumber = Split(objFile.Name, "-")(1) 

        If Not TifCollection.Exists(fileNumber) Then 
            TifCollection.Add fileNumber, CreateObject("Scripting.Dictionary") 
        End If 

        TifCollection.Item(fileNumber).Add pageNumber, ""
    End If 
Next