#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, а затем полагается на конечного пользователя, выполняющего операцию «Преобразование текста в столбцы» с данными. Это далеко от идеала, учитывая огромные объемы данных, которые я импортирую.