使用 excel 作为 vba 中的输入文件(脚本 - 非 MS OFFICE)

Using excel as inputfile in vba (scripting - non MS OFFICE)

我正在 VBA(在工作区内,而不是 MS office 程序内)开发一个脚本,需要使用一个小的 excel 文件作为输入。我想使用 excel 文件中的数据并将其加载到二维数组中,以便我可以根据这些数据在我的脚本中做出决定。 我已经尝试 google 这个问题,但通常我会在 excel 中找到问题,但我没有运气在 MS Office 之外找到 vba 脚本的任何东西。

我可以只使用 .Xlsx 作为输入文件吗? 如何将这些数据放入二维数组中?我的文件只有 11 行和 2 列。

感谢您的宝贵时间。

这令人困惑。 VBA = MS Office VBA,据我所知。你是说 VB.NET 吗?虚拟机?无论如何,要从 xlsx 文件中提取数据而不在 Excel 中打开它,您需要解压缩它并挖掘里面的 XML 文件,或者使用 Office Open XML SDK 或任何其他像那样包装。

Open XML SDK

Office Open XML fileformat

我认为这也适用于 Visual Basic [应用程序];我在 Excel VBA 和 Word VBA:

中试过了

在VB开发环境中,select 工具、参考。在现在出现的列表中,选中您需要的对象模型。在您的情况下,您需要检查 Microsoft Excel 12.0 对象库。

您现在可以访问应用程序中完整的 Excel 对象模型,并且可以根据需要打开和操作 Excel 电子表格文件。

以下 VB for Word 中的代码会打开一个 Excel 电子表格并获取第一个单元格的值:

Sub ExcelTestInWord()
    Dim oExcel As Object
    Dim wb As Object
    Dim v

    'Declare a variable as a FileDialog object.
    Dim fd As FileDialog
    Dim vrtSelectedItem As Variant

    Set oExcel = CreateObject("Excel.Application")

    'Create a FileDialog object as a File Picker dialog box.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    If (fd.Show = -1) Then
        For Each vrtSelectedItem In fd.SelectedItems
            Set wb = oExcel.Workbooks.Open(vrtSelectedItem)
            v = wb.Sheets(1).Cells(1).Value
            wb.Close
        Next vrtSelectedItem
    End If

End Sub

以下面的VBScript代码为例,保存为.vbs文件启动:

Option Explicit
Dim strSourceFilePath, strSourceSheetName, strSourceRange, arrData, strResult, i, j

' set initial data
strSourceFilePath = "C:\Test\data.xlsx"
strSourceSheetName = "input"
strSourceRange = "A1:B11"

' get 2-dimensional array from Excel sheet
With CreateObject("Excel.Application")
    .Visible = False
    .DisplayAlerts = False
    With .Workbooks.Open(strSourceFilePath)
        arrData = .Sheets(strSourceSheetName).Range(strSourceRange).Value
        .Close
    End With
    .Quit
End With

' array output for debug purposes
strResult = ""
For j = 1 To UBound(arrData, 1)
    For i = 1 To UBound(arrData, 2)
        strResult = strResult & arrData(j, i) & ";" & vbTab
    Next
    strResult = strResult & vbCrLf
Next
WScript.Echo strResult