Страницы: 1
RSS
Как перевести эксель документ в XML файл средствами VBA
 
Всем, привет. Может тут есть кто сталкивался с такой задачей. Есть данные в эксель, есть схема XML. Необходимо эти данные привести к такому формату как в схеме.
Сам я в этом плохо разбираюсь. В интернете информация есть, взял готовый пример и попробовал переделать под свои нужды, но файл на выходе не совпадает со схемой. Помогите пож-та с макросом.  
 
Так?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Так?

Спасибо, я не силен в xlm, но это немного оличается от схемы
В схеме блок ORDER_INFO закрывается в самом низу, а блоки ORDER_REC не закрываются вот так->  </ORDER_REC>
Код
<?xml version="1.0"?>
<RATE_VALUE_DOC VER="1.0">
    <DOC_INFORM SENDER_NAME="ÀÎ ÁÀÍÊ" DOC_NO="1" DOC_TIME="14:41:15" DOC_DATE="29-01-2020">
    </DOC_INFORM>
    <ORDER_INFO ORDER_RATE_VALUE="" PERFOM_PHONE="" PERFOM_FIO="" APPROVED_FIO="Ïåòðîâ Ïåòð Ïåòðîâè÷" APPROVED_POST="Ãåí. Äèð." RATE_TYPE="R" DEPO_VALUE="1000000000" DAYS="7" RETURN_DATE="11/4/2019" DEPO_DATE="10/28/2019" ORDER_NUM="150870XP" KO_NAME="ÀÎ ÁÀÍÊ">
    </ORDER_INFO>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="176438.35616438" YEAR_DAYS="365" FLOAT_RATE="6.44" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.75" INDICATIVE_DATE="10/28/2019" CALC_DATE="10/29/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="351780.82191781" YEAR_DAYS="365" FLOAT_RATE="6.4" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.71" INDICATIVE_DATE="10/29/2019" CALC_DATE="10/30/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="528493.15068493" YEAR_DAYS="365" FLOAT_RATE="6.45" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.76" INDICATIVE_DATE="10/30/2019" CALC_DATE="10/31/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="699726.02739726" YEAR_DAYS="365" FLOAT_RATE="6.25" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.56" INDICATIVE_DATE="10/31/2019" CALC_DATE="11/1/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="872054.79452055" YEAR_DAYS="365" FLOAT_RATE="6.29" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.6" INDICATIVE_DATE="11/1/2019" CALC_DATE="11/2/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="1044383.56164384" YEAR_DAYS="365" FLOAT_RATE="6.29" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.6" INDICATIVE_DATE="11/1/2019" CALC_DATE="11/3/2019">
    </ORDER_REC>
    <ORDER_REC DEPO_VALUE="1000000000" RATE_VALUE="1216712.32876713" YEAR_DAYS="365" FLOAT_RATE="6.29" SPRED="0" DISKONT="0.31" NORMATIVE_RATE="4.75" KEY_RATE="6.5" INDICATIVE_RATE="6.6" INDICATIVE_DATE="11/1/2019" CALC_DATE="11/4/2019">
    </ORDER_REC>
</RATE_VALUE_DOC>
 
Я ничего глобально не менял, просто перенес элементы в атрибуты. Как у вас было написано так и формируется.
Цитата
bakid написал:
блоки ORDER_REC не закрываются вот так-> </ORDER_REC>  
Это не имеет значения, как закрывается, может  закрываться "/>" а может с именем элемента.
Могу со своей стороны сказать, что если все теги будут закрываться "/>", то не всегда удобно парсить такой документ, но это уже другая история.
"Все гениальное просто, а все простое гениально!!!"
 
Замените это -
Код
     rootNode.appendChild ElemNode
    For i = 1 To UBound(dataArr)
        rootNode.appendChild getOrderRecNode(xmlDoc, i, dataArr)
    Next

на это
Код
    For i = 1 To UBound(dataArr)
        ElemNode.appendChild getOrderRecNode(xmlDoc, i, dataArr)
    Next
    rootNode.appendChild ElemNode
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, спасибо огромное. А не знаете как переносить строки в xml, чтобы более читабельно было?
 
У вас все как нужно перенесено, т.к. данные записаны в атрибуты, если бы было как в первоначальном файле (данные заносились бы в элементы) то было бы читабельней,
а так придется смириться  ;)
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, отправил сегодня xml файл в фед. казначейство, говорят что не верное оформление(что эксель просто перевели в xml). Не понимаю что не так. http://www.roskazna.ru/upload/iblock/660/tff_depozity_sverka_nachisleniya_protse­ntov_v.1_00.docx
Изменено: bakid - 30.01.2020 12:29:12
 
ответили:

Файл сформирован в MS Excel методом сохранения в "Таблица XML", это не правильно!

 
Цитата
bakid написал:
это не правильно!
А как правильно? Я вижу сформированный xml файл, что не так?
Сравните то что приложено в стартовом сообщении с тем что формирует файл, в чем отличие?
"Все гениальное просто, а все простое гениально!!!"
 
В том то и дело, что я тоже разницы не вижу
 
Цитата
bakid написал:
В том то и дело, что я тоже разницы не вижу
попросите разъяснить что значит
Цитата
bakid написал:
Файл сформирован в MS Excel методом сохранения в "Таблица XML", это не правильно!
в чем заключается неправильность. Я к сожалению тут ни чем помочь не смогу.  :(
Изменено: Nordheim - 30.01.2020 13:06:02
"Все гениальное просто, а все простое гениально!!!"
 
Добрый день! Что Вы называете схемой (схема.txt из #1)? Если это образец XML-файла, то он неверный. Переименуйте файл в файл с расширением .xml и откройте любым браузером - Вы сразу увидете ошибки.
Владимир
 
Цитата
sokol92 написал:
Если это образец XML-файла, то он неверный
Это я из вордовского документа(ссылка на него пару сообщений выше) скопировал в txt файл и сюда приложил, просто вордовский файл не влезал
 
Цитата
sokol92 написал:
Если это образец XML-файла, то он неверный.
Файл формируется в xml формате.
"Все гениальное просто, а все простое гениально!!!"
 
Код
DOC_DATE = Format(Now, "DD-MM-YYYY")
формат не соответствует требованиям - нужно
Код
DOC_DATE = Format(Now, "YYYY-MM-DD")
далее
Код
ElemNode.setAttribute "RETURN_DATE", wb.Sheets(1).Range("RETURN_DATE")
тоже неверно, нужно задать тот же формат
Код
ElemNode.setAttribute "RETURN_DATE", Format(cdate(wb.Sheets(1).Range("RETURN_DATE")), "YYYY-MM-DD")
ну и вообще просмотрите остальные поля на предмет соответствия требования и подправьте где надо. Даты там у Вас почти все неверный формат имеют. Так же есть подозрение, что RATE_VALUE нужно до 2-х знаков после запятой округлять. У Вас этого нет.

P.S. Вы вложили нам документ Word, а сами-то его читали? Там вот нашел как раз про суммы:
Цитата
Сумма | Действительное число с   разделителем «.» и не более чем двумя цифрами после разделителя
в общем ознакомьтесь внимательно и подкорректируйте все форматы согласно требованиям. И будет Вам счастье.
Изменено: Дмитрий(The_Prist) Щербаков - 30.01.2020 14:13:58
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, получается только в форматах дело? Сама структура xml документа верная?
 
Я не берусь утверждать, но сама структура выглядит корректно, с точки зрения приведенного в качестве примера документа.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Структура xml документа аналогична той, которая в 1 посте. Если в 1 посте верная, то по логике и сформированный файл имеет верную структуру.
Форматы возможно не распознаются при парсинге (есть стандарт и все должно быть аналогично, а вы высылаете отличный от стандарта формат данных), поэтому вам и написали, что все плохо.
Изменено: Nordheim - 30.01.2020 16:00:16
"Все гениальное просто, а все простое гениально!!!"
 
Всем спасибо за разъяснения
Страницы: 1
Наверх