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

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
спасибо добрый человек.

Акстивейт помогает мне в случае глобаль7ого зависания GangRun, из за огромного кол-ва файлов, у него такое случается.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Да у господина Дроздова ролик как подружить AE с xls уже несколько лет висит...
Главная идея - чтение xls файла без Excel. У Александра он же используется.
121689
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
@Spirit412 Зачем скрипты, если есть вариат прямо джавой ? Мне кажется способ @baraka более устойчив, правда я еще его не пробовал :)
Не по теме:
ЖДу пока ты попробуешь и расскажешь :)

Из минусов это не забыть перенести бибилотеки при апгрейте или переносе на другую версию.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Знаний по Java хватило написать класс с ретурном "Привет мир!"
Java довольно сложный.
Я кучу времени убил пока в эклипсе сделал простейший jar и запустил его на АЕ

А так то да... бесплатная библиотека Apache POI.
Конечно, если приспичит... Если задачи конкретные появятся - напрягусь, и сделаю на JAVA.

Я тут через VBScript скрипты Python запускать научился.
Осталось параметры передавать научиться.
Под Python есть всякие интересные бесплатные библиотеки.
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
тоже работы дофига, что бы эксперименты проводить нет времени :(
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
тоже работы дофига, что бы эксперименты проводить нет времени :(
Бывают периоды затишья...
Вот тогда то и можно что нибудь накуралесить.
121706

Главное что бы сервак не убить. Но на это - есть бэкап

С джавой еще неудобно из-за всяких класпаз и перезапуска сервера.
 

ACTPOHOM

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

baraka

Участник
Сообщения
193
Реакции
90
Главная идея - чтение xls файла без Excel. У Александра он же используется.
Посмотреть вложение 121689

Да всё равно библиотека нужна, можно кстати через sql это делать без Run Script, получишь тот же самый xml.

Код:
SELECT *
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 8.0;HDR=NO;Database=C:\abcd.xlsx',
    'select * from [sheet1$] where [OID] = N'33312'')
 
  • Спасибо
Реакции: ACTPOHOM

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Не плохо.
Я пока застрял с xlrd и именованными ячейками.
Уже освоил чтение из MySQL, запись xml.
Питон довольно простой язык. Простой синтаксис.
Скрипты питона легко запускаются из VBS с передачей параметров.
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
Спасибо добрый человек!
попробуем!
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
В общем, я пока сделал связку VBS -> Python
Работает ну очень быстро.
Пробовал с десяток xls отправлять. Через Data сплит... т.е. как я понимаю, это уже распаралеливание процесса.
VBS передаёт патрибуты PY скрипту. Тут нет проблем указать в АЕ переменную инфу для PY скрипта.
VBS получает обратную связь о завершении работы PY скрипта и соответственно АЕ знает об этом.

Если интересно, могу выложить код. Ну или в ЛС пишите
 

baraka

Участник
Сообщения
193
Реакции
90
Пробовал с десяток xls отправлять. Через Data сплит... т.е. как я понимаю, это уже распаралеливание процесса.
Нет. Run Script всё равно ждёт, пока кто-то завершится.

Чтобы распараллелить процессы, нужно создать петлю и отправить команды не дожидаясь завершения
Код:
For Each input in inputs
PID = oShell.Exec(myprogparamfile).ProcessID
oShell.AppActivate(PID)
a = AddItem(a, PID) //добавляем ID процесса в массив
Next

Соответственно вторая петля должна отслеживать запущенные процессы, завершены ли они или нет.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Нет. Run Script всё равно ждёт, пока кто-то завершится.

Чтобы распараллелить процессы, нужно создать петлю и отправить команды не дожидаясь завершения
Код:
For Each input in inputs
PID = oShell.Exec(myprogparamfile).ProcessID
oShell.AppActivate(PID)
a = AddItem(a, PID) //добавляем ID процесса в массив
Next

Соответственно вторая петля должна отслеживать запущенные процессы, завершены ли они или нет.
Хорошо. Но всё равно - по сравнению с использованием Excell. Чтение происходит значительно быстрее.
А у меня помимо чтения, запросы в MySQL идут. Запись в XML. Всё это без конструкторов и не оптимизировано. Но я рад.
можно было бы какой-нибудь тэстик написать. Что бы скорость сравнить. Времен нет
 

ACTPOHOM

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

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Хм...
Может барака точнее прояснит, я в этом не так сильно разбираюсь.
Но. Запуск питоновского скрипта из скриптранера отличается от скрипта, 100% работающего на vbs.
Питоновский скрипт можно из ком.строки запустить, и грубо говоря, скриптраннер как бы запускает скрипт через python.exe и ждет ответа.
Какая тут нагрузка?

Я неделю тестирую. Ни одного сбоя
 

baraka

Участник
Сообщения
193
Реакции
90
Хм...
Может барака точнее прояснит, я в этом не так сильно разбираюсь.
Но. Запуск питоновского скрипта из скриптранера отличается от скрипта, 100% работающего на vbs.
Питоновский скрипт можно из ком.строки запустить, и грубо говоря, скриптраннер как бы запускает скрипт через python.exe и ждет ответа.
Какая тут нагрузка?

Я неделю тестирую. Ни одного сбоя
Я писал уже, скрипт раннер может переодически зависать. Соотвествено когда он встаёт, другие задачи скрип раннера встают колом.
 

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Я писал уже, скрипт раннер может переодически зависать. Соотвествено когда он встаёт, другие задачи скрип раннера встают колом.
Да, это конечно существенный косяк скриптраннера. Может тогда проще без него?
Я не силён в Java... Но разве нельзя CMD запустить с параметрами?
 

baraka

Участник
Сообщения
193
Реакции
90
Да, это конечно существенный косяк скриптраннера. Может тогда проще без него?
Я не силён в Java... Но разве нельзя CMD запустить с параметрами?
можно и так, я уже где-то здесь писал как это можно сделать, на примере с ping ya.ru
 
  • Спасибо
Реакции: Spirit412

Spirit412

Топикстартер
15 лет на форуме
Сообщения
870
Реакции
128
Да, действительно.
Правда пришлось взять за основу давние эксперименты по парсингу внешнего xml файла на Java в смарте.
Код:
function f ()
  {
var a = 'C://Windows//System32//cmd.exe';
var cmd = new java.io.File(a);

var b = 'C://Python37//python.exe';
var py = new java.io.File(b);

var c = 'C://Temp//test.py';
var file = new java.io.File(c);

return java.lang.Runtime.getRuntime().exec(cmd +  ' /c ' +  ' ' + py + ' ' + file).waitFor();
//возвращает 0 или 1: завершено или нет.
// /c :Выполнение команды, заданной параметром команда, с завершением работы. 
  }
f ();
 
  • Спасибо
Реакции: ACTPOHOM