Доброе утро всем. Есть проблемка: в прикрепленных файлах XML файл, который я хотел бы импортировать в эксель по столбцам id, parentid, brand, min_price, url и столбец с названиями. Но при попытке импорта (вкладка Разработчик - Импорт) выдается ошибка "Ошибка импорта XML": Ошибка разбора XML. Подскажите, пожалуйста: 1) Возможно ли импортировать такой файл в эксель? 2) Если возможно, то как его отредактировать,чтобы эксель его принял? 3) Сможет ли эксель импортировать файл весом в 6 мб? 4) Если нет, то какие костыли нужно изобрести, чтобы принял? В прикрепленном файле (.rar) пример XML, который эксель не может импортировать.
Добрый день, во вложенном файле есть 2 ошибки: 1) первая строка должна содержать информацию о версии xml и о кодировке. так как у вас все по русски, то первая строка должна быть
Код
<?xml version="1.0" encoding="windows-1251" ?>
2) теги категорий должны быть объединены в группу, иначе все что после 1 категории считается экстра информацией (может быть разные id могут помочь ) чтоб не мучиться с id, проще создать группу "list" и включить в нее все категории, для этого: вторая строка в файле будет :
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