Всем доброе время суток! Проблема следующая. Есть энное количество XML файлов, которые надо импортировать в Excel и далее их там обрабатывать. Но есть проблема - встроенная схема предполагает, что одно поле имеет тип "integer", в результате чего 18-значное число округляет последние 3 цифры. Но мы ж не идиоты, мы ж читаем, что в документации Мелкософтов. Так как все файлы XML однотипные, выгружаем из одного из них макросом схему:
Код
Sub save_XML_scheme()
Dim fPath As String
Dim s As String
fPath = "C:\TEMP\sc1.xsd"
s = ActiveWorkbook.XmlMaps(1).Schemas(1).XML
Open fPath For Output As #1
Print #1, s
Close #1
MsgBox "Схема сохранена в файл C:\TEMP\sc1.xsd "
End Sub
потом Блокнотом меняем нужный параметр на "string" Загружаю ручками файл, выбираю "Use the XML Source task pane". После чего импортирую сохраненную схему и переношу поля на лист. После чего лезу в панель разработчика и импортирую Все получается, ОК. Но простому пользователю (а их несколько десятков у меня) такую фигню не объяснишь и ручками делать не заставишь, даже если не выгружать схему и не править в блокноте, а сразу дать готовенькую. "Нужна кнопка, Урри!" (с) Вычитываем документацию еще и пишем макрос:
Код
Sub xmlImportScheme()
Dim src()
Dim schm As String
src = Application.GetOpenFilename(, , "Выберите файл .xml", , True)
schm = Application.GetOpenFilename(, , "Выберите схему", , False)
Dim a As XmlMap
For Each x In src
Workbooks.Add
ActiveWorkbook.XmlMaps.Add(schm, "DESSCC").Name = "DESSCC_Map1"
With ActiveWorkbook.XmlMaps("DESSCC_Map1")
.ShowImportExportValidationErrors = True
.AdjustColumnWidth = True
.PreserveColumnFilter = True
.PreserveNumberFormatting = True
.AppendOnImport = True
End With
For Each y In ActiveWorkbook.XmlMaps
If y.Name = "DESSCC_Map1" Then Set a = y
Next y
ActiveWorkbook.XmlImport Url:=x, ImportMap:=a, Overwrite:=True, Destination:=Range("$A$1")
Next x
End Sub
И тут получается фейл, потому что мало того, что файл импортируется по дефолтной схеме, на по прописанной карте DESSCC_Map1, но и значение переменной "a" меняется на текущую дефолтную схему. На Stackoverflow вопрос про эту неведому зверушку висит третий день, его даже не смотрят. Поиском и макрорекордером удалось найти еще способ импортировать схему - через XMLMAps