Возможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН. [vba]
Код
Sub xml() Workbooks.OpenXML Filename:="C:\1.xml", LoadOption:= _ xlXmlLoadImportToList End sub
[/vba]
Возможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН. [vba]
Код
Sub xml() Workbooks.OpenXML Filename:="C:\1.xml", LoadOption:= _ xlXmlLoadImportToList End sub
Если даже для этого примера перед импортом xml сделать формат столбца , в который будут импортироваться данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым, но лидирующие нули всё равно пропадут.
[vba]
Код
Sub xml() Columns("J:J").Select Selection.NumberFormat = "@" Range("A1").Select With ActiveWorkbook.XmlMaps("Файл_карта") .ShowImportExportValidationErrors = False .AdjustColumnWidth = True .PreserveColumnFilter = False .PreserveNumberFormatting = True .AppendOnImport = False End With ActiveWorkbook.XmlImport URL:="C:\1.xml", ImportMap:=Nothing, Overwrite:= _ True, Destination:=Range("$A$1") End Sub
[/vba]
Если даже для этого примера перед импортом xml сделать формат столбца , в который будут импортироваться данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым, но лидирующие нули всё равно пропадут.
[vba]
Код
Sub xml() Columns("J:J").Select Selection.NumberFormat = "@" Range("A1").Select With ActiveWorkbook.XmlMaps("Файл_карта") .ShowImportExportValidationErrors = False .AdjustColumnWidth = True .PreserveColumnFilter = False .PreserveNumberFormatting = True .AppendOnImport = False End With ActiveWorkbook.XmlImport URL:="C:\1.xml", ImportMap:=Nothing, Overwrite:= _ True, Destination:=Range("$A$1") End Sub
Не лучший вариант, поскольку лучше разобраться со схемой для XML и настроить для правильного импорта (как не знаю, сразу не изучишь). Можно вот таким кривоватым вариантом [vba]
Код
Public Sub myxmlimport() Const xmlFile = "d:\path\filename.xml" Dim fso As Object, pStream As Object, pCell As Range Dim sText As String, sName As String Set fso = CreateObject("Scripting.FileSystemObject") Set pStream = fso.OpenTextFile(xmlFile) sText = pStream.ReadAll: pStream.Close sText = VBA.Replace(sText, "=""0", "=""'0") sName = fso.GetTempName sName = "\" & Mid$(sName, 1, InStrRev(sName, ".") - 1) & ".xml" sName = Environ$("Temp") & sName Set pStream = fso.CreateTextFile(sName, True) pStream.Write sText: pStream.Close ActiveWorkbook.XmlImport sName, Nothing, True, Range("A1") ActiveSheet.UsedRange.NumberFormat = "@" fso.DeleteFile sName For Each pCell In ActiveSheet.UsedRange If Mid$(pCell.Value, 1, 1) = "'" Then pCell.Value = Mid$(pCell.Value, 2) Next End Sub
[/vba]
Добавление В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel. Файл схемы прикладываю. Как пользоваться "Импорт схемы и данных XML в Excel" Пробуйте.
Не лучший вариант, поскольку лучше разобраться со схемой для XML и настроить для правильного импорта (как не знаю, сразу не изучишь). Можно вот таким кривоватым вариантом [vba]
Код
Public Sub myxmlimport() Const xmlFile = "d:\path\filename.xml" Dim fso As Object, pStream As Object, pCell As Range Dim sText As String, sName As String Set fso = CreateObject("Scripting.FileSystemObject") Set pStream = fso.OpenTextFile(xmlFile) sText = pStream.ReadAll: pStream.Close sText = VBA.Replace(sText, "=""0", "=""'0") sName = fso.GetTempName sName = "\" & Mid$(sName, 1, InStrRev(sName, ".") - 1) & ".xml" sName = Environ$("Temp") & sName Set pStream = fso.CreateTextFile(sName, True) pStream.Write sText: pStream.Close ActiveWorkbook.XmlImport sName, Nothing, True, Range("A1") ActiveSheet.UsedRange.NumberFormat = "@" fso.DeleteFile sName For Each pCell In ActiveSheet.UsedRange If Mid$(pCell.Value, 1, 1) = "'" Then pCell.Value = Mid$(pCell.Value, 2) Next End Sub
[/vba]
Добавление В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel. Файл схемы прикладываю. Как пользоваться "Импорт схемы и данных XML в Excel" Пробуйте.anvg
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.
Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls? При открытии файла xls с урезанной картой выскакивает предупреждение: "Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется.
В принципе, ничего сложного со схемой нет (в смысле принудительно задать тип данных для атрибутов), если "ручками" поправить в читаемый вид ту, что автоматически создаёт Excel.
Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls? При открытии файла xls с урезанной картой выскакивает предупреждение: "Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется.Неопытный
Сообщение отредактировал Неопытный - Понедельник, 23.09.2013, 23:26
Что вы под этим подразумеваете? Я предлагал следующее по "Добавление" 1. Открываем xml файл в новой книге. 2. Excel создаёт для него схему по-умолчанию 3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML 4. Копируем в блокнот полученный текст 5. находим строчки <xsd:attribute name="П200000000013" form="unqualified" type="xsd:integer"></xsd:attribute> и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например). 6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы). 7. После чего загружаем схему и по ней создаём "умную" таблицу. 8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.
Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы. Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы... Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel.
Цитата
создал соответствующую ему xml-карту
Что вы под этим подразумеваете? Я предлагал следующее по "Добавление" 1. Открываем xml файл в новой книге. 2. Excel создаёт для него схему по-умолчанию 3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML 4. Копируем в блокнот полученный текст 5. находим строчки <xsd:attribute name="П200000000013" form="unqualified" type="xsd:integer"></xsd:attribute> и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например). 6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы). 7. После чего загружаем схему и по ней создаём "умную" таблицу. 8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.
Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы. Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы... Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel.anvg
создал соответствующую ему xml-карту Что вы под этим подразумеваете?
Делал так: Открывал xml на листе книги "Данные-xml-импорт" Открывал полученную карту "Данные-xml-источник xml" Очищал Лист. В окошке "Источник xml" брал мышкой нужный пункт и тащил его на столбец листа,в нужную ячейку, при этом в этой ячейке появляется оглавление,также можно тащить не отдельный элемент,а сразу нужный блок и он распределится по столбцам При загрузке xml файла через "Данные-xml-импорт" или макросом,заполнялись только те столбцы,которые были отмечены.
Но если эту карту сохранять через Immediate, то обратно она не импортируется, появляются разные синтаксические ошибки.
создал соответствующую ему xml-карту Что вы под этим подразумеваете?
Делал так: Открывал xml на листе книги "Данные-xml-импорт" Открывал полученную карту "Данные-xml-источник xml" Очищал Лист. В окошке "Источник xml" брал мышкой нужный пункт и тащил его на столбец листа,в нужную ячейку, при этом в этой ячейке появляется оглавление,также можно тащить не отдельный элемент,а сразу нужный блок и он распределится по столбцам При загрузке xml файла через "Данные-xml-импорт" или макросом,заполнялись только те столбцы,которые были отмечены.
Но если эту карту сохранять через Immediate, то обратно она не импортируется, появляются разные синтаксические ошибки.Неопытный