Страницы: 1
RSS
Экспорт в txt в формате "типа" html
 
Добрый день. Попробую в последний раз обнаглеть и обратиться с просьбой помощи в бесплатном разделе форума.... Буду благодарен помощи.

Задача состоит в том, чтобы выгрузить в txt файл таблицу (желательно указать конкретный лист, так как листов в книге будет много) в виде xml version="1.0" , то есть насколько я понимаю это не стандартный код. Вообщем названия столбцов в таблице, это заголовки. Выгрузка должна быть в формате: xml version="1.0" encoding="UTF-8". Пары столбцов IJ и KL имеют одинаковые заголовки, если данные в одной паре (например KL в первой строчке) или во всех парах отсутствуют, то соответственно и  данный текст должен отсутствовать "<Field Name="Еще">хххххххххххххххх</Field>"
Пример как выглядит таблица exel и txt во вложении.

Заранее большое спасибо.
Изменено: gorogankin - 28.11.2019 12:38:35
 
Техзадание - вижу
Попыток решения - нет (в интернетах достаточно подобных макросов, могли бы сами хоть что-то попробовать наваять)
Неужто сложно нагуглить примерно подходящий макрос?

PS: это не HTML код, а XML
Ищите макросы для экспорта из Excel в XML (макросы для создания XML по таблице Excel)
Изменено: Игорь - 28.11.2019 06:37:14
 
Цитата
Игорь написал:
Ищите макросы для экспорта из Excel в XML (макросы для создания XML по таблице Excel)
Спасибо за подсказку, я просто не совсем в теме, играюсь методом тыка так сказать, искал именно по тегу HTML и находил все не то, сейчас попробую поискать
 
Я нашел примерное решение вопроса. Во вложении файл, но он сохраняет не совсем как мне нужно.
Нужно чтобы:
1) 1 уровень был <TSLibrary>, а он сохраняет <Root>, потом после <TSLibrary> должен быть один пробел
2) <Element Filename="F:\TITR\удалить.tpj" StartDate="28.11.2019"..... - то есть данные должны быть внутри заголовка второго уровня и они должны быть вида: Заголовок="Текст из таблицы".
3) Насколько я понял: <Field Name="Подпись">тут будет текст</Field> и перед ним должно быть уже 2 пробела - это уже заголовок 3-го уровня, и как это реализовать я не знаю....

Игорь, может посмотрите?

Други очень прошу помощи, спасибо. Я совсем не шарю не в xml коде не в макросах, так методом визуального втыка пытаюсь экспериментировать....
Изменено: gorogankin - 28.11.2019 14:33:51
 
С этим я разобрался, кроме пробелов:
Цитата
gorogankin написал:
1 уровень был <TSLibrary>, а он сохраняет <Root>
Во вложении измененный файл
Изменено: gorogankin - 28.11.2019 14:51:46
 
Цитата
gorogankin написал:
должен быть один пробел
Пробелы между тегами в xml игнорируются.
Вы попутали некоторые элементы и свойства элементов
То, что красным подсвечивается-это свойства элементов
 
doober, добрый день, да, вы действительно правы, я сейчас в тест-файлике удалил все пробелы и программа его схавала. Я просто далеко не спец не в xml не в VBA, поэтому просто смотрю визуально. Сама программа просто сохраняет файл с пробелами, я поэтому и подумал что это важно.

Цитата
doober написал:
Вы попутали некоторые элементы и свойства элементов
Да, попутал, теперь немного это понимаю, но не совсем понимаю как мне сделать правильно выгрузку, я же пример кодал взял с интернета, там видимо без свойств элементов был сделан вариант.
 
Например так
Код
        Set xmlFields = xmlDoc.DocumentElement.appendChild(xmlDoc.createElement("Element"))
        xmlFields.setAttribute "Filename", "F:\TITR\удалить.tpj"
 
Я еще попробовал стандартными средствами эксель экспортивоть в mxl, все хорошо, но затык именно в этой части элемента:

<Field Name="Подпись">тут будет текст</Field>

Если удаляю его, то выгрузка стандартным средством эксель получается и файл моей программой читается, но вот не задача, мне нужно чтобы этот элемент обязательно присутствовал, мало того их может быть несколько подряд. А с ним программа не дает экспортировать, пишет оишбка.
 
doober, я понимаю что нужно что-то подправить здесь, а что подправить и как вообще не понимаю  :D  :sceptic: , помогите, пожалуйста:
Код
For i = LBound(arrData) To UBound(arrData)
' создание нового узла
Set xmlFields = xmlDoc.DocumentElement.appendChild(xmlDoc.createElement("Element"))
    xmlFields.setAttribute "", ""

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
 
Всем спасибо за помощь, вопрос решен.
Страницы: 1
Наверх