首页 > 解决方案 > 什么是 VB.NET 等效于 Excel 的 Web 源获取和转换功能?

问题描述

我正在尝试在 VB.NET 脚本中复制 Excel 的 Get & Transform 功能。我想从列表中加载每个 URL,并执行加载所有表的等效操作,就像使用 Data->From Web 时一样。

为了说明我在说什么,这里有一些屏幕截图: 创建一个新From Web查询。 创建新的从 Web 查询

然后选择所有找到的表并加载。 在此处输入图像描述

我想最终得到这样的集合Queries & Connections在此处输入图像描述

我最接近的方法是使用 URL 创建一个新的 QueryTable,并保存所有表。

Public Sub Main()
    Dim URL As String = Dts.Variables("User::URL").Value.ToString()
    Dim FileName As String = Dts.Variables("User::FileName").Value.ToString()
    Dim xlNone As XlWebFormatting = XlWebFormatting.xlWebFormattingNone
    Dim Format As XlFileFormat = XlFileFormat.xlCSVWindows
    Dim ScrapeStatus As Integer = 1

    Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass

    With excel
        .SheetsInNewWorkbook = 1
        .DisplayAlerts = False
    End With

    Dim wb As Microsoft.Office.Interop.Excel.Workbook = excel.Workbooks.Add()

    With wb
        .Activate()
        .Worksheets.Select(1)
    End With

    Try

        Dim rnStart As Range = wb.ActiveSheet.Range("A1:Z100")
        Dim qtQtrResults As QueryTable = wb.ActiveSheet.QueryTables.Add(Connection:="URL;" + URL, Destination:=rnStart)

        With qtQtrResults
            .BackgroundQuery = False
            .WebFormatting = xlNone
            .WebSelectionType = XlWebSelectionType.xlAllTables
            .Refresh()
        End With

        excel.CalculateUntilAsyncQueriesDone()
        wb.SaveAs(FileName)

        wb.Close()
        excel.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel)
        GC.Collect()
        GC.WaitForPendingFinalizers()
        Dts.TaskResult = ScriptResults.Success

    Catch ex As Exception

        Dts.Variables("User::Error").Value = ex.Message.ToString()
        wb.Saved = True
        wb.Close()
        excel.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel)
        GC.Collect()
        GC.WaitForPendingFinalizers()
        Dts.TaskResult = ScriptResults.Failure

    End Try

End Sub

这会将所有表放在一个工作表中,并且 .xlsx 文件最终包含一个 Connection 下面,Queries & Connections而不是 Queries 选项卡下的 N 个表。 在此处输入图像描述

那么,是否有一个 VB.NET 等价于 Excel 的 Data->From Web UI?

标签: excelvb.netpowerquery

解决方案


在广泛搜索各种 VB* 文档后,我发现我正在寻找的功能来自 Power Query 工具。目前它只存在于 VBA 中,从 Excel 2016 开始。

该集合Workbook.Queries包含WorkbookQuery表示 Power Query 查询的对象。


推荐阅读