Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis
Сложного ничего. Много текста. MSXML3 и MSXML6 разные. Читайте доки.
http://www.script-coding.com/XMLDOMscripts.html
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms757828(v%3Dvs.85)
https://blogs.msdn.microsoft.com/xmlteam/2007/03/12/upgrading-to-msxml-6-0/
Подробнее...

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 18:41 22-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
я Вам благодарен, буду изучать.
Получается все в одну строку, уфффф...... Нужно все из Excel забрать, а там по 20000 строк!!!
Буду текстовыми функциями пользоваться.

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:24 23-11-2018 | Исправлено: zhudionis, 04:34 23-11-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zhudionis
а почему не воспользоваться экспортом из экселя в xml?
или, уж если прямой экспорт почему-то не устраивает - написать макрос на VBA? всяко проще...

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 04:56 23-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
Можно и на VBA, но там не простой экспорт, а признаки наличия атрибутов, пример таблицы
Ссылка
В принципе сделал скрипт через текстовые функции с записью в файл через ADODB.Stream, но подумал, что правильнее будет работать с файлом XML напрямую. В будущем хочу сделать и обратную выгрузку.
P.S. я начинающий, просто пытаюсь автоматизировать рутину
Мой скрипт
Подробнее...

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 07:14 23-11-2018 | Исправлено: zhudionis, 07:25 23-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis
Сразу два замечания -  
1. Переводы строк не важны
2. Для XML в атрибутах могут использоваться как одинарные так и двойные кавычки.
И строка
TMS = TMS&vbCrLf&"  </ANALOGS>"&vbCrLf&" </RTU>"&vbCrLf&"</CHANNEL>"&vbCrLf&"<CHANNEL ChannelNum="&""""&ChanNum(m)&""""&" ChannelName="&""""&ChanName(m)&""""&">"
становится
TMS = TMS & "</ANALOGS></RTU></CHANNEL><CHANNEL ChannelNum='"& ChanNum(m) &"' ChannelName='" & ChanName(m) &"'>"
 
Я бы делал как-то так : Подробнее...
Можно весь диапазон сразу принять в массив, и потом обращаться aRange(i, cПеременная).

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 08:48 23-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
1. Переводы строк не важны  

мне важны, не так же просто я их забацал)), этот файл в такой форме принимается программой
 
за подсказки спасибо - разбираюсь
 
Добавлено:
Alex_Piggy
Set oRange = Range("A2:T2")  
 а как обращаться к Excel?

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 11:08 23-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
zhudionis

Цитата:
мне важны, не так же просто я их забацал)), этот файл в такой форме принимается программой  

Тогда перед сохранением примените PrettyXML
 

Цитата:
Set oRange = Range("A2:T2")  
 а как обращаться к Excel?

Как и обращались. Это VBA Excel макрос.
То есть

Код:
 
Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
filename = oExec.StdOut.ReadLine
 
set oExcel = CreateObject("Excel.Application")
oExcel.Visible = true
Set oBook = oExcel.Workbooks.Open(fileName)
Set oRange = oBook.Worksheets(1).Range("A2:T2")
 


Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 12:25 23-11-2018 | Исправлено: Alex_Piggy, 18:31 26-11-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
добрый день!
 
выше рассмотрели пример формирования xml файла из vbs  
тоже предстоит подобная задачка, но опыта почти ноль
 
собираю оболочку, конфигурирующую установку редакций офиса на основе установщика click 2 run
пока это в основном только наброски внешнего вида, будет много чекбоксов и в зависимости от того что активировано/деактивировано должен будет формироваться xml файл конфигурации установки
 
пример xml файла
 
внешний вид
 
оболочка
 
Вопросы:
1.
можно ли привести фрагмент кода который при установленном чекбоксе "ru-RU" запишет в xml файл строку
      <Language ID="ru-RU" />
а при деактивированном (не отмеченном) чекбоксе OneDrive запишет
      <ExcludeApp ID="OneDrive" />
2. если xml файл нужно сложить по кирпичикам из совокупности отмеченных/деактивированных чекбоксов, как организовать вывод в файл, чтобы каждая новая строка дописывалась, а не перезаписывала файл
3. как организовать раскрывающийся список, который при выборе в нем элемента будет менять состав выводимых в поле опций, например, выбрали редакцию proplus под ней отобразились входящие в ее состав приложения, выбрали standard - отобразились входящие в нее (чтобы убрать из интерфейса множество по сути отвлекающих и дублирующихся опций)?
4. можно ли что-то добавить в код скрипта к определенным командам (как якорь в html), чтобы скомпилированному exe файлу можно было передавать параметры установки, конфигурируя ее из командной строки, например
exe /proplus /ru-RU /excludeonedrive /silent
прописало бы в формируемый xml файл соответственно  
    <Product ID="Proplus2019Volume">
      <Language ID="ru-RU" />
      <ExcludeApp ID="OneDrive" />
..
<Display Level="None" AcceptEULA="TRUE" />
 
заранее благодарю за ответы!

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 10:34 24-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, 5peciali5t
К сожалению, Вам сюда - AutoIT (Часть 3)
1.  Несколько лет AutoIT не трогал.  Но как-то так (diff -u к Вашему коду)
2. Не понял. Если MSXML DOM - то в любом случае файл будет перезаписываться. Вы формируете объект, потом сбрасываете его в файл.
3. Динамический интерфейс... Я бы использовал что-то вроде TreeView. Пример. Спрашивайте в теме по AutoIT.
4. Да, можно.

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 15:24 24-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо! Опыта у Вас.... Короче, круто!
Не могу понять, куда  PrettyXML  в коде добавить.

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:43 26-11-2018 | Исправлено: zhudionis, 07:14 26-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis

Цитата:
Не могу понять, куда  PrettyXML  в коде добавить.

Без него точно не годится/не работает?
К сожалению, я обнаружил что мой код только для MSXML6 работает...  
Думаю, как для MSXML3 сделать. Вечером. Дополню.
Встречал FormatXMLNode - но он для VBA.
Использовать - перед сохранением запустить с DomDocument в качестве аргумента.

Код:
 
Set oXML = CreateObject("MSXML2.DomDocument.6.0")
oXML.load "in.xml"
PrettyXML oXML
oXML.save "out.xml"

 
UPD:
PrettyXML для любой версии MSXML

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 08:44 26-11-2018 | Исправлено: Alex_Piggy, 18:29 26-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Кстати без него тоже работает, но лично под собственные нужды нужно в читабельном виде.
Иногда правлю этот самый файл в Notepad++.
 

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 09:03 26-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
А не будет наглостью попросить, сделать скрипт для обратной выгрузки из такого XML в мой XLS?
 
 

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 06:23 28-11-2018 | Исправлено: zhudionis, 06:26 28-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis
Подробнее...

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 19:04 28-11-2018 | Исправлено: Alex_Piggy, 11:46 29-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Для меня это уже сложновато, надеюсь, разберусь.
Это тоже VBA? Можно встраивать в любой файл?
 
Понял, это VBS. Но останавливается на 130 строке. Но файл создает и это круто!!!
Вот пример всего файла Ссылка
 
С другими файлами пока ошибок нет.
Вы не представляете насколько упростили работу, готов даже заплатить за такое!!!!!

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 05:01 29-11-2018 | Исправлено: zhudionis, 05:34 29-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis

Цитата:
Понял, это VBS. Но останавливается на 130 строке. Но файл создает и это круто!!!

Создает, но не весь. Из ~9000 строк только 4000 из-за "=220 В". Исправить - поставьте перед oRange.Value2 = TransposeArray2D(aData)  
oRange.NumberFormat = "@"
 
Заметил - не для всех STATUSES или ANALOGS есть имена. Пример - RTU из строки 1533  <RTU RTUNum="19" RTUName="ШОТ" RTUObjPfx="+ (да)"> . Сейчас - пишет пустые строки.
Проверьте все остальное своими глазами...
UPD: Та где нет имен есть RTUObjPfx="+ (да)" . Что это такое? Поищите полное описание этих XML.

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 08:53 29-11-2018 | Исправлено: Alex_Piggy, 08:59 29-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Знак равенства, как я понял, останавливает скрипт, ясно.
 
То что нет имен у Statuses и Analogs - не страшно, главное ,место для имени в Excel остается.
Для себя решили, что имя быть ДОЛЖНО -  правило хорошего тона.
 
RTUObjPfx="+ (да)" - не обязательно, хотя подумываю..... не важно короче
 
 
Вообще файл - ничто иное, как база данных, описание переменных в одной из СКАДА программ.
RTUObjPfx="+ (да)" - говорит о том, что в данном RTU имя RTU будет добавлено  к наименованию параметра.
например RTUName="Оренбурская СЭС-5 КРУ-10 яч.206"
и StatusName="яч.206 ТСН-2 положение тележки вкачена"
 в итоге программа покажет: Оренбурская СЭС-5 КРУ-10 яч.206 - яч.206 ТСН-2 положение тележки вкачена
 
 
Вообще файл создается и средствами самой программы, но делать это совсем неудобно, щелкать мышкой на каждом параметре по несколько раз...... Вот и задумался про Excel, разработчики почему-то про него забыли(

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 10:05 29-11-2018 | Исправлено: zhudionis, 10:32 29-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
zhudionis

Цитата:
Знак равенства, как я понял, останавливает скрипт, ясно.

Нет/не совсем.  Знак равенства в начале строки для Excel означает, что это формула.
oRange.NumberFormat = "@" - это принудительно рассматривать все только как текст. То есть проблема пропадет.
 

Цитата:
 
То что нет имен у Statuses и Analogs - не страшно, главное ,место для имени в Excel остается.  
 Для себя решили, что имя быть ДОЛЖНО -  правило хорошего тона.
RTUObjPfx="+ (да)" - не обязательно, хотя подумываю..... не важно короче

Замените
  aData(cStatuses - 1, aDataPos) = oNode.getAttribute("StaDesc")
На  
  aData(cStatuses - 1, aDataPos) =IIF(oRTU.getAttribute("RTUObjPfx") <> "", oRTU.getAttribute("RTUName") & " ", "") & oNode.getAttribute("StaDesc")
И
  aData(cAnalogs - 1, aDataPos) = oNode.getAttribute("AnaDesc")
На
  aData(cAnalogs - 1, aDataPos) =IIF(oRTU.getAttribute("RTUObjPfx") <> "", oRTU.getAttribute("RTUName") & " ", "") & oNode.getAttribute("AnaDesc")
Обновил в предыдущем посте.

Всего записей: 1893 | Зарегистр. 07-08-2002 | Отправлено: 11:30 29-11-2018 | Исправлено: Alex_Piggy, 11:46 29-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Да, да ))) это я и имел ввиду)))
 
Добавлено:

Цитата:
Замените  
  aData(cStatuses - 1, aDataPos) = oNode.getAttribute("StaDesc")  
На  
  aData(cStatuses - 1, aDataPos) =IIF(oRTU.getAttribute("RTUObjPfx") <> "", oRTU.getAttribute("RTUName") & " ", "") & oNode.getAttribute("StaDesc")  
И  
  aData(cAnalogs - 1, aDataPos) = oNode.getAttribute("AnaDesc")  
На  
  aData(cAnalogs - 1, aDataPos) =IIF(oRTU.getAttribute("RTUObjPfx") <> "", oRTU.getAttribute("RTUName") & " ", "") & oNode.getAttribute("AnaDesc")  
Обновил в предыдущем посте.

Вы не правильно поняли, может отсутствовать и AnaDesc и RTUObjPfx, они никак не связаны
 
вот как это в программе
Ссылка

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 11:31 29-11-2018 | Исправлено: zhudionis, 12:31 29-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Но идея с именем, мне понравилась.
Если нет имени группы то заменять его именем RTU - феноменально!!!

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:21 30-11-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru