VBScript для AE - чтение XLS без Excel и запись красивого XML

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Только один вопрос.
как сделать так, что бы если нет отклика в течении 5 сек, убивать процесс?
 
  • Спасибо
Реакции: f1ai

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
То что нужно!
Спасибо огромное
Сделаю пока на питоне. Потом на java с apach poi перейду
 
  • Спасибо
Реакции: f1ai

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
  • Спасибо
Реакции: f1ai

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Можете пожалуйста выложить этот vbs код? У меня пока не выходит
Код:
 Function Main(inputs, outputFolder, params)
Dim WshShell, fso, loc, cmd, sFile, pyExe, inputFile, outFolder
Const Quote = """"
 inputFile = inputs(0)
 WScript.Echo(Recode("Входящий файл XLS: " & inputFile, "cp866", "windows-1251"))
 outFolder = outputFolder
 WScript.Echo(Recode("Папка XML: " & outFolder, "cp866", "windows-1251"))

Set fso = CreateObject("Scripting.FileSystemObject")
loc = fso.GetAbsolutePathName(".")
sFile = "C:\Esko\bg_data_fastserverscrrunnt_v100\Scripts\WindowsScript\MyPyScript_ForBlankFlexo_v1.py "  & Quote & inputFile & Quote & " " & Quote & outFolder & Quote
pyExe = "C:\Python37\python.exe "
'~ cmd = "%ComSpec% /k C:\Python37\python.exe " + loc + "\Hello.py"
'cmd = pyExe & loc & sFile
WScript.Echo pyExe + sFile


Set WshShell = CreateObject("WScript.Shell")
WshShell.Run (pyExe & sFile),3,true

if WScript.Arguments.Count = 0 then
    loc = fso.GetAbsolutePathName(".")
else
    loc = WScript.Arguments(0)
end if

End function
'Функция смены кодировки для вывода кирилицы в консоль'
            Function Recode(StrText, SrcCode, DestCode)
                With CreateObject("ADODB.Stream")
                    .Type = 2
                    .Mode = 3
                    .Charset = DestCode
                    .Open
                    .WriteText (strText)
                    .Position = 0
                    .Charset = SrcCode
                    Recode = .ReadText
                    .Close
                end with
            End Function


 Dim inputs()
 Dim outputFolder
 Dim params()

 Main inputs, outputFolder, params
 Main = "OK"
 
  • Спасибо
Реакции: f1ai

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Одного не смог добиться, парадачи данных из PY скрипта в VBS что бы можно было вывести в консоль шатла.
Передаётся только состояние - PY скрипт закончил работу или нет. Если закончил, VBS продолжает дальше работать.
WshShell.Run (pyExe & sFile),3,true

Если у вас получится передать информацию из PY в VBS, прошу поделиться рецептом.
 
  • Спасибо
Реакции: f1ai

baraka

Участник
Сообщения
193
Реакции
90
Одного не смог добиться, парадачи данных из PY скрипта в VBS что бы можно было вывести в консоль шатла.
Передаётся только состояние - PY скрипт закончил работу или нет. Если закончил, VBS продолжает дальше работать.
WshShell.Run (pyExe & sFile),3,true

Если у вас получится передать информацию из PY в VBS, прошу поделиться рецептом.

Всё просто,
записать вывод во временный файл .Run(myprog.exe > f:\asd.txt, потом из него прочитать и вывести в консоль
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Всё просто,
записать вывод во временный файл .Run(myprog.exe > f:\asd.txt, потом из него прочитать и вывести в консоль
Да, это хороший вариант использовать файл для обмена, но вдруг есть готовое решение в самом VBS.
 

baraka

Участник
Сообщения
193
Реакции
90
Да, это хороший вариант использовать файл для обмена, но вдруг есть готовое решение в самом VBS.

Только так. 4 строчки, куда проще?

Код:
return = WshShell.Run("cmd /c C:\snmpset -c ... > c:\temp\output.txt", 0, true)

Set fso  = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("c:\temp\output.txt", 1)
text = file.ReadAll
file.Close
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
"Фирмачи" почему-то не загоняются, пишут простой скрипт пересохраняющий в CSV и далее его уже используют.
Санек, в питоне есть библиотеки позволяющие картинки из Excel сохранить, а в ячейку прописать имя файла ?
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Есть библиотека, и не одна.
Посмотрю что там имеется по работе с картинками
 
  • Спасибо
Реакции: ACTPOHOM

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
Есть библиотека, и не одна.
Посмотрю что там имеется по работе с картинками

Видимо перед тем как вытаскивать все в XML надо сохранить картинки в локацию excel /images
и порядковый номер картинки поставить в ячейку типа img_001.jpg.
Потом уже парсинг.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Используется библиотека win32com.client
excel = win32com.client.Dispatch("Excel.Application")
Получается что PY использует эксель для работы.
Что нам не очень подходит.
Если интересно:
 
  • Спасибо
Реакции: f1ai

f1ai

10 лет на форуме
Сообщения
26
Реакции
2
Код:
 Function Main(inputs, outputFolder, params)
Dim WshShell, fso, loc, cmd, sFile, pyExe, inputFile, outFolder
...

Почему нельзя нажать "Спасибо" 100 раз? Я бы нажал! :)
Я в программировании совсем новичок, пишу только на питоне и совсем чуть-чуть на js. Мечтал о возможности встроить .py в АЕ процесс уже давно.
ОГРОМНОЕ ВАМ СПАСИБО!
 

baraka

Участник
Сообщения
193
Реакции
90
Видимо перед тем как вытаскивать все в XML надо сохранить картинки в локацию excel /images
и порядковый номер картинки поставить в ячейку типа img_001.jpg.
Потом уже парсинг.
Если xlsx можно дёрнуть все изображения по аналогии с youtube.com/watch?v=j5UW1hsj6Zw
они находятся в каталоге xl\media
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
Если xlsx можно дёрнуть все изображения по аналогии с youtube.com/watch?v=j5UW1hsj6Zw
они находятся в каталоге xl\media
Да, там не все так просто.
Если в ячейке цифра, она будет прописана в файле Sheet1.xml
<row r="1" spans="1:3" x14ac:dyDescent="0.2">
<c r="A1">
<v>111</v>
</c>
<c r="B1">
<v>222</v>
</c>
<c r="C1">
<v>333</v>
</c>
</row>

Если текст то в этой файле будет ссылка на позицию в другом файле
<row r="1" spans="1:3" x14ac:dyDescent="0.2">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>

вот этот файл sharedString,xml содержит в порядке <v> уже текстовые даные
<si>
<t>MamaA1</t>
</si>
<si>
<t>MamaB1</t>
</si>
<si>
<t>MamaC1</t>
</si>
<si>
<t>MamaA2</t>
</si>
<si>
<t>MamaB2</t>
</si>
<si>
<t>MamaC2</t>
</si>
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
То, что на видосе повторить легко, по сути там просто подмена одинх значений другими.
реального полного вдумчивого разбора нет.
Если данные только цифры, ок, можно сделатьсредствами АЕ.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Почему нельзя нажать "Спасибо" 100 раз? Я бы нажал! :)
Я в программировании совсем новичок, пишу только на питоне и совсем чуть-чуть на js. Мечтал о возможности встроить .py в АЕ процесс уже давно.
ОГРОМНОЕ ВАМ СПАСИБО!
Пользуйтесь.
 
  • Спасибо
Реакции: f1ai