Страницы: 1
RSS
XML-файл не импортируется в Excel
 
Доброе утро всем. Есть проблемка: в прикрепленных файлах XML файл, который я хотел бы импортировать в эксель по столбцам id, parentid, brand, min_price, url и столбец с названиями. Но при попытке импорта (вкладка Разработчик - Импорт) выдается ошибка "Ошибка импорта XML": Ошибка разбора XML. Подскажите, пожалуйста:
1) Возможно ли импортировать такой файл в эксель?
2) Если возможно, то как его отредактировать,чтобы эксель его принял?
3) Сможет ли эксель импортировать файл весом в 6 мб?
4) Если нет, то какие костыли нужно изобрести, чтобы принял?
В прикрепленном файле (.rar) пример XML, который эксель не может импортировать.
Изменено: Andyvier - 14.03.2014 11:27:50
 
Я думаю тут нужно просто макросом построчно парсить файл, собирать массив значений (ну или словарь/коллекцию, не суть).

Проще так - пишем сразу на лист, без заморочек с массивами-словарями. Ну будет дольше - но 6 мб не 600...
Изменено: Hugo - 14.03.2014 12:16:07
 
Добрый день, во вложенном файле есть 2 ошибки:
1) первая строка должна содержать информацию о версии xml и о кодировке. так как у вас все по русски, то
первая строка должна быть

Код
<?xml version="1.0" encoding="windows-1251" ?>


2) теги категорий должны быть объединены в группу, иначе все что после 1 категории считается экстра информацией (может быть разные id могут помочь )
чтоб не мучиться с id, проще создать группу "list" и включить в нее все категории, для этого: вторая строка в файле будет :
Код
 <list>
далее содержимое вашего файла, последняя строка
Код
</list>

полученный файл легко импортируется в excel.
Изменено: egonomist - 14.03.2014 12:20:54
 
Hugo, egonomist, спасибо большое, теперь базовый файлик грузится. На счет макроса для большого файла попробую, спасибо.
 
Вот конкретно по этому файлу:
Код
Option Explicit

Sub parser()
    Dim FSO As Object, ts As Object, Mypath As String, arrstr, i&, ii&, a, s
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Mypath = "C:\Downloads\1.xml"

    Set ts = FSO.OpenTextFile(Mypath, 1)
    arrstr = Split(ts.ReadAll, vbCrLf)
    ts.Close

    Application.ScreenUpdating = False

    For i = 0 To UBound(arrstr)
        s = Trim(Application.Clean(arrstr(i)))
        If Len(s) Then
            a = Split(s, "=""", 2)
            Select Case a(0)
            Case "<category id": ii = ii + 1: Cells(ii, 1) = Left(a(1), Len(a(1)) - 1)
            Case "parentId": Cells(ii, 2) = Left(a(1), Len(a(1)) - 1)
            Case "brand": Cells(ii, 3) = Left(a(1), Len(a(1)) - 1)
            Case "cnt_avail": Cells(ii, 4) = Left(a(1), Len(a(1)) - 1)
            Case "cnt_notavail": Cells(ii, 5) = Left(a(1), Len(a(1)) - 1)
            Case "min_price": Cells(ii, 6) = Left(a(1), Len(a(1)) - 1)
            Case "url": Cells(ii, 7) = Left(a(1), Len(a(1)) - 2)
            Case "</category>"
            Case Else: Cells(ii, 8) = a(0)
            End Select
        End If
    Next

    Application.ScreenUpdating = True

    MsgBox "OK", vbInformation
End Sub

 
Страницы: 1
Наверх