Пайтон скрипты - ликбез

Автор calc4fem, 29 февраля 2012, 07:37

0 Пользователи и 1 гость просматривают эту тему.

Hasim

Все файлы можно, конечно, хранить в любой папке, например, с именем "111" на диске "C:"
Тогда код слегка изменится:

arg1="C:\111\g2c3.py"
arg2="C:\111\gmsh.msh"
arg3="C:\111\sol.inp"

calc4fem

#16
ого! внезапно - работает. аргументы в принципе присобачиваются из интерфейса.
правда выдача (sol.inp) в соответствии со скриптом же в ту же папку
уже 50% полезной статьи!
но это можно наверно доделать сам скрипт. А произвольную функцию нескольких аргументов (например res=x+y) никак нельзя заставить отработать внутри ячейки Calc ?

Hasim

Ну разнесите все файлы по разным папкам (имена можете выбрать по желанию.
arg1="C:\111\g2c3.py"
arg2="C:\222\gmsh.msh"
arg3="C:\333\sol.inp"

calc4fem

#18
работает еще прекрасней!
кстати команда shell из функции тоже работает. то есть если функция возвращает некое значение в текстовый файл то теоретически его можно считать и передать как результат функции Calc
Это же адски интересно?
Интересно - можно ли придумать на этой почве надстройку. даже пусть не сложную как надстройку а как форма распространения самой полезной идеи?
с кратким описанием начальных сведений из пайтона для широких рабочекрестьянских масс
NumPy воткнуть в опенофис было бы неплохо.

Hasim

А теперь ложка дегтя.

Вот тут
arg0="c:\Program Files\OpenOffice.org 3\program\python.exe" & " "
забит жестко путь к Python.

А если у вас LibreOffice?
А если у вас Linux?
А если вы установили OpenOffice/LibreOffice в какую-то другую папку, или у вас Portable версия?

Вы должны каким-то образом программно получить переменную окружения INSTALLLOCATION и использовать её в коде, чтобы сделать макрос переносимым.

Я, честно говоря, не помню, как это сделать, а рыться в документации нет времени.

Кто-нибудь из "гуру" напомнит?

Yakov

http://wiki.openoffice.org/wiki/Ru/FAQ/Basic
вопрос "Как найти каталог, в который установлен OpenOffice.org"

Hasim

Это хорошо.
Ещё бы вспомнить, как программно определить в какой операционной системе вы работаете: Windows, Linux, MacOS, ...?

Hasim

Цитата: Yakov от 19 ноября 2012, 13:20
http://wiki.openoffice.org/wiki/Ru/FAQ/Basic
вопрос "Как найти каталог, в который установлен OpenOffice.org"
ЦитироватьИз Basic
com.sun.star.util.OfficeInstallationDirectories

Вспомнил еще сервис
paths = CreateUnoService("com.sun.star.util.PathSubstitution")
выдает массу всяких путей.

calc4fem

#23
Я не знаю почему в Опен Офис сделали такую урезанную поддержку Пайтон. Самый в общем то красноглазый язык и такое невнимание. Полагаю что связано со второй платной расширенной версией от Sun - поддержка мощного языка наверно привела бы к тому что всю функциональность платной версии старого ООо быстро бы дописали умельцы. Кстати даже не знаю что с ней, с этой версией, сейчас.
Я использую Линукс постоянно дома но пользователей Мака поблизости нет.
Вот самая простая навскидку схема с файлом электронных таблиц где предлагается вручную выбрать пути (к пайтону, к файлу и тд)
Если опен офис будет сам искать место установки пайтон то в связи с тем что версии постоянно меняются может быть лучше оставить вариант ручного выбора (с пояснением где примерно копать). А при нажатии на открытие файла можно (в продвинутом варианте) автоматически открывать папку с наиболее вероятным для данной ОС в данный момент местом.
Сам файл скрипта разработчик (который будет использовать сам темплейт) может кончено просто поместить в архив с файлом ООо и пользователь там же его и найдет куда распаковал (то есть по умолчанию тот же путь где сам файл). Опционально - все прочие пути.
У меня только пока один вопрос - как в коде прописать текстовую переменную выбранного пути заданного контрола, размещенного прямо на рабочей книге? К стыду не смог это сделать даже, настолько бедны мои познания бэйсика.
Конечно если развивать эту тему дальше (как использовать библиотеки пайтон типа wx и numPy если таковые используются в скрипте но их нет в составе ООо). По тупому прописать путь к библиотеке или воткнуть ее с помощью расширения в дистрибутив). У меня настолько бедны познания в этом языке, одни предположения. Я думаю если закинуть даже самый простой темплейт (типа PythonRun или Run4Python) на хранилище то может быть это как то привлечет внимание сообщества в конце концов.

[вложение удалено Администратором]

Hasim

Цитата: calc4fem от 20 ноября 2012, 05:13У меня только пока один вопрос - как в коде прописать текстовую переменную выбранного пути заданного контрола, размещенного прямо на рабочей книге?
Макрос, читающий выбранные значения ваших контролов в массив:
Sub Main
Dim dpv(3)

oDoc=ThisComponent
oSheet=oDoc.Sheets.getByName("Sheet1")   
dp=oSheet.DrawPage

For i=0 To 3
dpv(i)=dp.getByIndex(i).Control.Text
MsgBox dpv(i)
Next i

End Sub

calc4fem

спасибо за код - доделаю темплейт.
а с чем связано ограничение что команда шелл не запускает консольных программ или запускает без консоли? то есть из папки windows/system32    calc.exe запускается, cmd.exe - нет. батники соответственно тоже нет.

Hasim

Shell и есть "эмулятор" cmd.exe в OpenOffice  (но это не "обычная" консоль, некоторые возможности недоступны).
Батники легко запускаются.
Пусть в папке "444" есть такой a.bat:
"c:\Program Files\OpenOffice.org 3\program\python.exe" C:\111\g2c3.py  C:\222\gmsh.msh C:\333\sol.inp C3
Тогда в Shell он вызывается так:
Shell ("c:/444/a.bat")

calc4fem

#27
Очень раздражает исчезновение консоли при запуске. Никак нельзя ее оставить, не знаете?
Версию шаблона я доделал. Можно ее конечно поулучшать, но я думаю так или иначе ее следует распространить (через sf.net например) просто прежде всего как саму идею для пайтонистов. хотя конечно минус то что в ооо - голимый пайтон без многих библиотек типа tk.
в линуксе надо просто писать в первом пути слово python
в папке что то попробовал подцепить по аналогии - вылетел офис. ну там понятно никаких exe в помине нет
Как получать результаты пайтон функций (с произвольным количеством переменных) с помощью ООо я не знаю. Надеюсь что когда нибудь появится нормальная поддержка языка.  
Кстати нагуглил возможно полезное онлайн приложение vb2py - для трансляции кода на бэйсик в питон


[вложение удалено Администратором]

Hasim

#28
Запустить консольные программы, например, cmd.exe, или Far.exe (консольный файловый менеджер), ..., а также и любые другие (не консольные), и батники тоже, можно с помощью сервиса "com.sun.star.system.SystemShellExecute":
Sub Main
   Dim oExec As Object
   oExec = createUnoService("com.sun.star.system.SystemShellExecute")
oExec.execute("C:\WINDOWS\system32\cmd.exe", "", 0)
'oExec.execute("C:\FAR\Far.exe", "", 0)
'oExec.execute("C:\WINDOWS\system32\calc.exe", "", 0)
        'oExec.execute("C:\444\a.bat", "", 0)
End Sub


calc4fem

да - большое спасибо. я просто пытался запустить оконно-консольное приложение таким образом и в принципе ничего не помогло - ни уносервис ни батники - не знаю почему. вручную все запускается, шеллом нет. исходя из чего сделал неверный вывод что не запускается из-за того что консоль
шаблоник вывалил на http://sourceforge.net/projects/libo4py/ - вас указал в свойствах файла, данных кроме тех что тут доступны я не знаю. дайте знать если хотите что то поменять и т.д.