Excel vba создание xml
Одна из «горячих» ИТ-тем нынешнего года — проблема интеграции разнородных информационных ресурсов, решение которой требует создания простого и надежного механизма обмена данными между различными приложениями. И сегодня, кажется, все уже знают: XML — тот золотой ключик, который должен открыть дверь в новый мир, где порядок наконец заменит собой существующий ныне информационный хаос великого множества форматов данных.
Напомним, что XML и HTML базируется на одинаковых синтаксических принципах — информация записывается в виде простого текста, в котором имеются управляющие команды (тэги) и собственно данные. XML отличается от HTML тем, что позволяет передавать не только данные, но также и информацию об их структуре, то есть HTML ориентирован на описание неструктурированных данных, а XML — структурированных. С точки зрения использования информации неструктурированные данные предназначены в первую очередь для визуального восприятия человеком, струкутрированные — для автоматической обработки (в том числе вычислений). Отметим, что оба этих языка представляют собой упрощенный вариант давно известного среди компьютерных лингвистов языка SGML (Standard Generation Markup Language).
Подчеркнем, что в принципе сама идея языка XML — текстового описания структуры и содержания некоторых данных — совсем не нова. Новизна заключается лишь в том, что лидеры компьютерной индустрии вроде бы осознали необходимость перехода от внутренних, закрытых, форматов к общим, открытым. Но, честно говоря, о том, насколько серьезны эти намерения (а не маркетинговые акции, предназначенные для показа своей готовности к открытости), можно будет судить лишь спустя некоторое время. XML — это мировой отраслевой стандарт, создание и развитие которого ведется под эгидой WWW Consortium, общественной организации, представляющей интересы входящих в нее участников рынка.
Что касается прикладных программистов, то они уже очень давно оценили преимущества простых текстовых форматов данных по сравнению с двоичными при информационном взаимодействии компонентов вычислительных систем. Могу сослаться на пример из собственной программистской практики десятилетней давности. При разработке информационно-аналитических систем для обработки геологических данных мы полностью перешли на текстовые форматы данных и описаний их структуры, резко сократив время на отладку программного комплекса и его конфигурирование под задачи пользователей. Сначала мы рассматривали такое решение как временное и хотели для повышения производительности перейти на двоичные форматы. Но жизнь показала, что это пустая трата времени, так как производительность компьютеров росла быстрее, чем объем базы данных.
Здесь следует сделать одно важное замечание. Текстовое представление данных имеет свои недостатки. Один из них — сложности с использованием символов, задействованных в качестве специальных (например, ""). Вторая проблема заключается в неоднозначности преобразования данных из внутреннего двоичного формата в текст, и наоборот. В последнем случае особое внимание нужно уделять национальной специфике форматов, особенно при работе с разными региональными установками и кодовыми таблицами.
Понятно, что появление общего стандарта описания данных избавляет разработчиков от необходимости придумывать собственные форматы. Однако за любую универсальность приходится расплачиваться определенной избыточностью, хотя в данном случае она будет не так велика и не будет сколь-нибудь заметна на современных компьютерах. Например, мне бы пришлось заменить свои старые описания параметров:
Прежде чем перейти к конкретным техническим вопросам, стоит сделать еще одно важное замечание. Сам по себе XML не решает проблемы преобразования XML-документов, что необходимо для передачи данных между приложениями. Проще говоря, XML лишь связывает, например, некоторый набор чисел с понятием (тэгом) «цена», но что именно означает данный термин, язык уже не может расшифровать. Таким образом, для правильной интерпретации содержимого XML-документов необходимо знать так называемую XML-схему, которая бы описывала смысл полей данных.
Введение в XML DOM
Visual Basic 6.0 и приложения MS Office 2000 не включают в себя поддержку XML на уровне пользователя и разработчика, хотя при этом многие приложения Office используют передачу данных с помощью XML для выполнения внутренних операций. Вместе с тем уже сегодня, не дожидаясь новых версий этих систем (где что-то, связанное с XML, должно вскоре появиться), программисты могут применять XML-формат для обмена информацией с помощью написания собственных достаточно простых программных конструкций. Видятся два пути реализации этой задачи:
-
Использование специального объекта XML, называемого XMLDOM, или DOMDocument (DOM, Document Object Model). Работа с этим объектом выполняется с помощью библиотеки Microsoft XML 2.0 (MSXML.DLL), на которую нужно сделать ссылку в окне Reference. (Обратите внимание: на моем компьютере в списке ссылок эта библиотека в начальный момент имеет индекс 1.0, а уже после ее подключения меняет его на 2.0.)
С точки зрения программиста в применении DOMDocument можно выделить три момента:
- формирование структуры и содержания документа, а также выборка из него необходимой информации;
- преобразование объекта из внутреннего формата во внешний текстовый XML-файл (в том числе вставка объекта в уже существующий файл), и наоборот;
- возможность передачи объекта внутри приложения, а также обеспечение доступа к нему из других приложений с помощью ActiveX.
Передача набора записей из VB-приложения в Excel
В наших «Советах для тех, кто программирует на VB» мы приводили два примера импорта данных из таблицы (набора записей, Recordset) в виде просто текстового файла (совет 297) и HTM-файла (совет 329). Попробуем выполнить аналогичную задачу с помощью XML-файла, который потом прочитаем в Excel.
With a Macro VBA in Excel, I need to convert date on 1 sheet in an excel file. For this, I have already created a script but I have a problem to generate correctly the date in an XML I need the first line a header and then a formula read all rows with data.
the excel data now are in this format:
But my output for now are this:
We need to have this output:
My problem is that my scripts in the xml file data dont create a new tag for client 1,2,3.. etc As you see in the second output that I would get. How can I make a loop that read all rows and in the meantime create a new tag for each rows?
But you need to loop from row 2 -> LastRow. Search "for loop" and "LastRow" and I suggest rage() instead of cells()
3 Answers 3
Consider using MSXML, a comprehensive W3C compliant library of XML APIs which you can use to build your XML with DOM properties ( createElement , setAttribute ) instead of concatenating text strings. XML is not quite a text file but a markup file with encoding and tree structure. VBA comes equipped with the MSXML object and can iteratively build a tree from Excel data as shown below:
Excel data
VBA Macro (builds XML tree and then pretty prints with XSLT)
Output
f i would to start to create all data in excel from row 4 how can i setup this? Also do you think is possible to have Client1, Client2 etc.
Change the loop entry: For i = 2 to For i = 4 . And simply concatenate an iterator to client node name: Set clientNode = doc.createElement("client" & i - 3) .
The way you have your code setup, all it does is look at first row. You need to add a loop for it to look through all your rows (I'm presuming that you have 'n' number of rows). To do this, you can first get the row count by using something like:
Now that you have your row count, add a FOR loop just before objStream.WriteText ("
Now change your row number with intRow . i.e.:
Hope this helps
Hi Zac thank you. The structure xml is generate correctly but the data are the same for each client. I have done something wrong?
Sub XMLExport()
Dim Заголовок As Range, Данные As Range
Set Заголовок = Range("a1:f1")
Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)
arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml"
' формируем DOMDocument, и сохраняем XML в файл result.xml
Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML
If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово"
End Sub
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
' получает в качестве параметров:
' двумерный массив arrData с данными для выгрузки,
' одномерный массив arrHeaders, содержащий заголовки столбцов,
' и strHeading$ - XML-константу объекта
Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' создаём новый DOMDocument
DataColumnsCount% = UBound(arrData, 2) - LBound(arrData, 2) + 1
HeadersCount% = UBound(arrHeaders) - LBound(arrHeaders) + 1
If DataColumnsCount% <> HeadersCount% Then MsgBox "Количество заголовков в массиве arrHeaders" & _
"не соответствует количеству столбцов массива", vbCritical, "Ошибка создания XML": End
xmlDoc.loadXML Replace("", " ", "_") ' записываем XML-константу объекта
For i = LBound(arrData) To UBound(arrData)
' создание нового узла
Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))
For j = LBound(arrHeaders) To UBound(arrHeaders) ' добавление полей в узел
Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), " ", "_")))
xmlField.Text = arrData(i, j + LBound(arrData, 2) - LBound(arrHeaders))
Next j
Next i
Set Array2XML = xmlDoc
End Function
Функция позволяет создавать Xml из таблицы, верхняя строка которой является заголовком
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?
Спасибо за помощь и внимание !
Sub XMLExport()
Dim Заголовок As Range, Данные As Range
Set Заголовок = Range("a1:f1")
Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)
arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml"
' формируем DOMDocument, и сохраняем XML в файл result.xml
Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML
If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово"
End Sub
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
' получает в качестве параметров:
' двумерный массив arrData с данными для выгрузки,
' одномерный массив arrHeaders, содержащий заголовки столбцов,
' и strHeading$ - XML-константу объекта
Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' создаём новый DOMDocument
DataColumnsCount% = UBound(arrData, 2) - LBound(arrData, 2) + 1
HeadersCount% = UBound(arrHeaders) - LBound(arrHeaders) + 1
If DataColumnsCount% <> HeadersCount% Then MsgBox "Количество заголовков в массиве arrHeaders" & _
"не соответствует количеству столбцов массива", vbCritical, "Ошибка создания XML": End
xmlDoc.loadXML Replace("", " ", "_") ' записываем XML-константу объекта
For i = LBound(arrData) To UBound(arrData)
' создание нового узла
Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))
For j = LBound(arrHeaders) To UBound(arrHeaders) ' добавление полей в узел
Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), " ", "_")))
xmlField.Text = arrData(i, j + LBound(arrData, 2) - LBound(arrHeaders))
Next j
Next i
Set Array2XML = xmlDoc
End Function
Функция позволяет создавать Xml из таблицы, верхняя строка которой является заголовком
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?
Спасибо за помощь и внимание ! Валерьянка
Sub XMLExport()
Dim Заголовок As Range, Данные As Range
Set Заголовок = Range("a1:f1")
Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)
arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml"
' формируем DOMDocument, и сохраняем XML в файл result.xml
Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML
If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово"
End Sub
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
' получает в качестве параметров:
' двумерный массив arrData с данными для выгрузки,
' одномерный массив arrHeaders, содержащий заголовки столбцов,
' и strHeading$ - XML-константу объекта
Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' создаём новый DOMDocument
DataColumnsCount% = UBound(arrData, 2) - LBound(arrData, 2) + 1
HeadersCount% = UBound(arrHeaders) - LBound(arrHeaders) + 1
If DataColumnsCount% <> HeadersCount% Then MsgBox "Количество заголовков в массиве arrHeaders" & _
"не соответствует количеству столбцов массива", vbCritical, "Ошибка создания XML": End
xmlDoc.loadXML Replace("", " ", "_") ' записываем XML-константу объекта
For i = LBound(arrData) To UBound(arrData)
' создание нового узла
Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))
For j = LBound(arrHeaders) To UBound(arrHeaders) ' добавление полей в узел
Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), " ", "_")))
xmlField.Text = arrData(i, j + LBound(arrData, 2) - LBound(arrHeaders))
Next j
Next i
Set Array2XML = xmlDoc
End Function
Функция позволяет создавать Xml из таблицы, верхняя строка которой является заголовком
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?
Спасибо за помощь и внимание ! Автор - Валерьянка
Дата добавления - 24.03.2014 в 17:10
Возможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel
в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН.
[vba]
Возможно ли как-то изменить текст макроса, открывающего файл xml в книге Excel
в виде таблицы, чтобы не пропадали лидирующие нули, например в номерах документов, ИНН.
[vba]
Если даже для этого примера перед импортом xml сделать формат столбца , в который будут импортироваться
данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым,
но лидирующие нули всё равно пропадут.
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 сделать формат столбца , в который будут импортироваться
данные из xml с лидирующим нулем, текстовым,то и после импорта он останется текстовым,
но лидирующие нули всё равно пропадут.
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
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
Не лучший вариант, поскольку лучше разобраться со схемой для 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
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
Этот вариант для файлов xml несложной структуры работает правильно. Файлы xml со сложной структурой открывает с некоторыми ошибками.
Этот вариант для файлов xml несложной структуры работает правильно. Файлы xml со сложной структурой открывает с некоторыми ошибками. Неопытный
Этот вариант для файлов xml несложной структуры работает правильно. Файлы xml со сложной структурой открывает с некоторыми ошибками. Автор - Неопытный
Дата добавления - 23.09.2013 в 17:23
Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls?
При открытии файла xls с урезанной картой выскакивает предупреждение:
"Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется.
Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls?
При открытии файла xls с урезанной картой выскакивает предупреждение:
"Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется. Неопытный
Открыл сложный xml,excel2003 создал соответствующую ему xml-карту.Сопоставил только нужные столбцы этой карте,чтобы не выводил в таблицу разного рода ненужные "шапки",адреса. Теперь при импорте xml файла передние нули почему-то перестали обрезаться и эти номера с передними нулями выводятся в текстовом файле,т.е. то что нужно было. В то время как при неурезанной карте они выводились в формате "общий" и нули обрезались.Есть ли какая-то возможность урезанную карту сохранить отдельно, или она может храниться только вместе с данным файлом xls?
При открытии файла xls с урезанной картой выскакивает предупреждение:
"Программой проверки проверки файлов Office обнаружена проблема при открытии данного файла.Возможно его небезопасно открывать".Можно не обращать на него внимание,т.к. оно не мешает работе,но непонятно почему оно появляется. Автор - Неопытный
Дата добавления - 23.09.2013 в 23:25
Что вы под этим подразумеваете?
Я предлагал следующее по "Добавление"
1. Открываем xml файл в новой книге.
2. Excel создаёт для него схему по-умолчанию
3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML
4. Копируем в блокнот полученный текст
5. находим строчки и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например).
6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы).
7. После чего загружаем схему и по ней создаём "умную" таблицу.
8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.
Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы.
Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы. Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel.
Что вы под этим подразумеваете?
Я предлагал следующее по "Добавление"
1. Открываем xml файл в новой книге.
2. Excel создаёт для него схему по-умолчанию
3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML
4. Копируем в блокнот полученный текст
5. находим строчки и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например).
6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы).
7. После чего загружаем схему и по ней создаём "умную" таблицу.
8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.
Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы.
Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы. Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel. anvg
Что вы под этим подразумеваете?
Я предлагал следующее по "Добавление"
1. Открываем xml файл в новой книге.
2. Excel создаёт для него схему по-умолчанию
3. В Immediate (можно и макросом в файл) получаем текст схемы ?ActiveWorkbook.XmlMaps(1).Schemas(1).XML
4. Копируем в блокнот полученный текст
5. находим строчки и в атрибуте type меняем "xsd:integer" на "xsd:string", чтобы данные этого атрибута из файлов xml с такой же структурой брались как текстовые (или ставим требуемые типы для даты xsd:date, например).
6. Сохраняем файл, с отредактированными типам, в кодировке UTF-8 с расширением xsd (собственно, файл-схемы).
7. После чего загружаем схему и по ней создаём "умную" таблицу.
8. После чего уже без проблем импортируем xml-файлы, соответствующей схемы.
Можно, по 7 - создать файл-шаблон для импорта xml-файлов заданной схемы.
Если у вас каждый раз различная схема импортируемых xml-файлов, тогда увы. Нужно писать достаточно серьёзный макрос. В любом случае потребуется участие пользователя, который по названию атрибутов, значений определял тип требуемых данных для импорта и для правильного отображения в Excel. Автор - anvg
Дата добавления - 24.09.2013 в 06:05
День добрый всем!
Жизнь заставляет сейчас писать на VB6 создание XML-файла по моим данным.
Не зная ни того, ни другого, где-то просто отрыла какой-то учебный пример и стала его переделывать. Почти идет, но проблема: у меня (упрощая суть) надо на выходе иметь что-то типа:
А получается то же самое, но нач.тэг – без ROWNUM="1”
У меня программа (если выхолостить лишнее) имеет примерный вид:
objRoot.setAttribute "xmlns:xsi"… - проходит, дозаписывает в нач.тэг,
а objDoc.documentElement.setAttribute "ROWNUM", "'" + Trim(Str(RsStat.Fields.Item("np"))) + "'" – нет.
Кто поможет. ((((
Windows 2000 Rus VB6, VB6 Resource Editor отсутствует
В Windows 2000 Rus + SP3 проинсталлировал Visual Studio 6 + MSDN Full (вся студия на 6 CD-R). В VB6.
Контроль длины Label. А также VB6 Portable vs VB6 Installed.
Исходя из заголовка темы, вопроса 2: 1.) Как определить, что в Label уже не хватает места для.
Начинающей компании по разработки приложений IOS требуются люди
Наша команда пока состоит из двух людей(программист и дизайнер). Мы студенты 3 курса НИУ ВШЭ. И нам.
Вот код. Он работает.
ADO как и DAO и ODA и AOD и проч. комбинации из этих и других 3 букв не причем.
Исх файл считывается, выходной - пишется, но - не со всеми необх требованиями.
т е именно XML (как говорил отец, в нашей стране все, что называется на 3 буквы, примерно одного качества!!)
Добавлено через 8 минут
Вот код. Он работает.
Уфффф. Насилу добралась - аж заново регистрировалась - непонятно что здесь надо вводить на форуме - email или login.
Спасибо, но Ваш вариант не работает.
Суть проблемы - на выходе вместо требуемых:
пишет:
т е нет самого фрагмента текста: ROWNUM="xx"
а менять 02 в конце имени тэга на 03,04,05. -это не проблема!!
Если у Вас есть реальные навыки в XML - напишите мне пожалуйста на < контакт удален >.
Или можете подсказать самую простенькую брошюрку по XML на 2-3 часа освоения??
А то уже третий день на него трачу, кончится тем, что просто текстовый файл на выходе буду создавать с текстовкой XML.
Добавлено через 2 минуты
P S
и при входе все-таки здесь в моде указывать Email или login?
А то после 2 попыток выбрасывает безвозвратно, быстрее перерегистрироваться, чем войти
Читайте также: