Импорт CSV-данных из веб-службы в Excel

#html #excel #http #vba #csv

#HTML #excel #http #vba #csv

Вопрос:

Я написал простой веб-сервис, который возвращает большие объемы данных csv. Я буду импортировать это в Excel в табличном формате, используя функцию Excel «Данные из Интернета».

Есть ли способ заставить Excel автоматически анализировать поля csv, возвращаемые в отдельные столбцы, как часть операции импорта?

В настоящее время единственное средство, которое у меня есть для этого, — сначала импортировать данные в один столбец, а затем написать код VBA для выбора данных и их разделения TextToColumns . Это кажется беспорядочным / подверженным ошибкам.

Другой альтернативой, которую я имею, является изменение веб-сервера для передачи данных в формате HTML. Однако я неохотно делаю это, поскольку добавление тегов вокруг каждого поля csv сильно повлияет на объем возвращаемых данных.

Ответ №1:

Адамски,

Вот что я использую. Я нашел ядро где-то в Интернете, но не знаю, где.

Что он делает, так это открывает файл с разделением на вкладки и считывает данные на листе Excel

 If Answer1 = vbYes Then    'I asked prior if to import a tab separated file
    Sheets("ZHRNL111").Select    'Select the sheet to dump the data
    On Error Resume Next
    With ActiveSheet
        If .AutoFilterMode Then .ShowAllData    'undo any autofilters
    End With
    Sheets("ZHRNL111").Cells.Clear    'remove any previous data
    On Error GoTo 0
    Range("A1").CurrentRegion.Delete
    Fname = MyPath amp; "LatestReportsReport-111.tsv"
    Open Fname For Input As #1
    iRow = 1
    Line Input #1, Record
    On Error Resume Next
    Do Until EOF(1)
        P = Split(Record, vbTab)
        For iCol = 1 To 14
            Cells(iRow, iCol) = P(iCol - 1)
        Next iCol
        iRow = iRow   1
        Line Input #1, Record
    Loop
    On Error GoTo 0
    Close 1
End If
  

С уважением,

Роберт Илбринк

Комментарии:

1. Как это работает с разделителями столбцов внутри данных? это должно быть как-то экранировано, и разделение не знает об этом, не так ли?

Ответ №2:

В зависимости от версии Excel, которую вы используете, вы должны иметь возможность открывать файл .csv в Excel и использовать функцию преобразования текста в столбцы, встроенную в Excel.

Кроме того, если бы вы могли изменить свой csv, чтобы разделить столбцы на основе запятых «,» вместо вкладок excel открывал бы его напрямую без необходимости форматирования. Однако я знаю, что иногда это может быть проблемой в зависимости от импортируемых вами данных, потому что, если данные содержат запятую, они должны быть внутри кавычек. По моему опыту, лучший способ — использовать цитаты для каждого поля, если это возможно.

Надеюсь, это поможет.

Ответ №3:

На самом деле я сейчас создаю продукт, чтобы сделать это как в XML, так и в JSON для Excel. Я знаю, что разделитель через запятую работает в Excel, с некоторыми оговорками. Один из способов обойти это — поместить некоторые «» вокруг текста между разделителями для функции «Данные из Интернета». Однако с этим все еще есть проблемы. Я обнаружил, что, несмотря на увеличенный размер, XML был лучшим вариантом для быстрого изменения. Я смог создать сервис и передать своему руководителю проекта документ Excel, который он мог обновлять в любое время.

Комментарии:

1. Спасибо. Я на самом деле построил что-то вокруг веб-службы, которая в конечном итоге обслуживает csv, а затем полагается на конечного пользователя, выполняющего операцию «Преобразование текста в столбцы» с данными. Это далеко от идеала, учитывая огромные объемы данных, которые я импортирую.