Что VB.NET эквивалентно функции Get & Transform для веб-источников в Excel? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь дублировать функциональность Excel Get & Transform в скрипте VB.NET. Я хочу загрузить каждый URL из списка и выполнить загрузку всех таблиц, как при использовании Data-> From Web.

Чтобы проиллюстрировать, о чем я говорю, вот несколько скриншотов: Создайте новый From Web запрос. Create new From Web query

Затем выберите все найденные таблицы и загрузите. enter image description here

Я бы хотел получить что-то вроде этой коллекции в Queries & Connections: enter image description here

Самое близкое, что я получил, - это создание нового QueryTable с использованием URL-адреса и сохранение всех таблиц.

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 в конечном итоге содержит одно Соединение в Queries & Connections вместо N таблиц на вкладке Запросы. enter image description here

Итак, есть ли VB.NET, эквивалентный Excel Data-> From Web UI?

1 Ответ

0 голосов
/ 16 января 2019

После тщательного поиска различной документации VB * я обнаружил, что нужная мне функциональность исходит от инструмента Power Query. В настоящее время он существует только в VBA, начиная с Excel 2016.

Коллекция Workbook.Queries содержит WorkbookQuery объектов, представляющих запросы Power Query.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...