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

спасибо добрый человек.

Акстивейт помогает мне в случае глобаль7ого зависания GangRun, из за огромного кол-ва файлов, у него такое случается.
 
Да у господина Дроздова ролик как подружить AE с xls уже несколько лет висит...
Главная идея - чтение xls файла без Excel. У Александра он же используется.
121689
 
@Spirit412 Зачем скрипты, если есть вариат прямо джавой ? Мне кажется способ @baraka более устойчив, правда я еще его не пробовал :)
Не по теме:
ЖДу пока ты попробуешь и расскажешь :)

Из минусов это не забыть перенести бибилотеки при апгрейте или переносе на другую версию.
 
Знаний по Java хватило написать класс с ретурном "Привет мир!"
Java довольно сложный.
Я кучу времени убил пока в эклипсе сделал простейший jar и запустил его на АЕ

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

Я тут через VBScript скрипты Python запускать научился.
Осталось параметры передавать научиться.
Под Python есть всякие интересные бесплатные библиотеки.
 
тоже работы дофига, что бы эксперименты проводить нет времени :(
 
тоже работы дофига, что бы эксперименты проводить нет времени :(
Бывают периоды затишья...
Вот тогда то и можно что нибудь накуралесить.
121706

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

С джавой еще неудобно из-за всяких класпаз и перезапуска сервера.
 
вроде как можно перегрузить только службу, барака выше писал про это.
 
Главная идея - чтение 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
Не плохо.
Я пока застрял с xlrd и именованными ячейками.
Уже освоил чтение из MySQL, запись xml.
Питон довольно простой язык. Простой синтаксис.
Скрипты питона легко запускаются из VBS с передачей параметров.
 
Спасибо добрый человек!
попробуем!
 
В общем, я пока сделал связку VBS -> Python
Работает ну очень быстро.
Пробовал с десяток xls отправлять. Через Data сплит... т.е. как я понимаю, это уже распаралеливание процесса.
VBS передаёт патрибуты PY скрипту. Тут нет проблем указать в АЕ переменную инфу для PY скрипта.
VBS получает обратную связь о завершении работы PY скрипта и соответственно АЕ знает об этом.

Если интересно, могу выложить код. Ну или в ЛС пишите
 
Пробовал с десяток xls отправлять. Через Data сплит... т.е. как я понимаю, это уже распаралеливание процесса.
Нет. Run Script всё равно ждёт, пока кто-то завершится.

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

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

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

Соответственно вторая петля должна отслеживать запущенные процессы, завершены ли они или нет.
Хорошо. Но всё равно - по сравнению с использованием Excell. Чтение происходит значительно быстрее.
А у меня помимо чтения, запросы в MySQL идут. Запись в XML. Всё это без конструкторов и не оптимизировано. Но я рад.
можно было бы какой-нибудь тэстик написать. Что бы скорость сравнить. Времен нет
 
@Spirit412 дело не в скорости, наносекунды тут считать нет смысла, вопрос в отказоустойчивости.
я налетал со скриптраннером неоднократно, если удастся обойтись или снизить на него нагрузку буду рад.
 
Хм...
Может барака точнее прояснит, я в этом не так сильно разбираюсь.
Но. Запуск питоновского скрипта из скриптранера отличается от скрипта, 100% работающего на vbs.
Питоновский скрипт можно из ком.строки запустить, и грубо говоря, скриптраннер как бы запускает скрипт через python.exe и ждет ответа.
Какая тут нагрузка?

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

Я неделю тестирую. Ни одного сбоя
Я писал уже, скрипт раннер может переодически зависать. Соотвествено когда он встаёт, другие задачи скрип раннера встают колом.
 
Я писал уже, скрипт раннер может переодически зависать. Соотвествено когда он встаёт, другие задачи скрип раннера встают колом.
Да, это конечно существенный косяк скриптраннера. Может тогда проще без него?
Я не силён в Java... Но разве нельзя CMD запустить с параметрами?
 
Да, это конечно существенный косяк скриптраннера. Может тогда проще без него?
Я не силён в Java... Но разве нельзя CMD запустить с параметрами?
можно и так, я уже где-то здесь писал как это можно сделать, на примере с ping ya.ru
 
  • Спасибо
Реакции: Spirit412
Да, действительно.
Правда пришлось взять за основу давние эксперименты по парсингу внешнего 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