Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Использование stdout shell скриптов в OOo макросах  (Прочитано 1429 раз)

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

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Чтобы использовать stdout в OOo макросах, можно  выполнить что-то
Shell("ls > /tmp/myfile.tmp")
Затем использовать содержимое /tmp/myfile.tmp
Вопрос к специалистам по OOo.
Нельзя ли в OOo макросе как-то обходиться без таких манипуляций.
Например, как в баше и т.д.
TEMP=`ls`
и все дела.
« Последнее редактирование: 26 Ноября 2010, 12:13:17 от alexander.pronin »

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Долго искал такую возможность и не нашёл.
Насколько знаю её не нашёл никто.
Вот тут где-то вопрос затрагивался http://forumooo.ru/index.php/topic,429.0.html

Думал что можно как-то прикрутить pipe'ы, но сейчас так думать перестаю - даже не вижу в какую сторону копать :(

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Интересное обсуждение.
Насчет пайпов я видел где-то такое обсуждение не сильно активное. Там OOo пускался как сервер и умел в потоке формировать пачку pdf.
Кажется, в howto я это видел 2 недели назад.

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Поправил на более универсальный вариант, для линукс и виндуз
Sub Main
user=createUnoService("com.sun.star.util.PathSubstitution").getSubstituteVariableValue("$(user)")
mkdir ConvertFromURL(user & "/Scripts/python")
pscript=""
sep=getPathSeparator()
for each c in split(ConvertFromURL(user & "/Scripts/python"),sep)
pscript=pscript & ".." & getPathSeparator()
next
if sep="\" then
home=environ("USERPROFILE")
else
home=environ("HOME")
end if
tmp=home & sep & ".tmp" & sep
mkdir tmp
script=tmp & "pyshell.py"
f=FreeFile
open script for output as #f
print #f, "import os" & chr(10) & "def shell(x):return """".join(os.popen(x).readlines())"
close #f
drive=split(script,sep)(0)
if len(drive)=2 and right(drive,1)=":" then script=mid(script,3)
script=replace(pscript & script,sep,"/")
script = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory").createScriptProvider("")._
getScript("vnd.sun.star.script:" & script & "$shell?language=Python&location=user")
msgbox script.invoke(array("dir """ & replace(home,"/",sep) & """"), array(), array())
End Sub
« Последнее редактирование: 26 Ноября 2010, 19:44:12 от smaharbA »
Я конечно далек от мысли...(с)

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
:)
Ну можно и так...
А если Питона не будет?

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
а "рантайм" пайтон в офисе присутствует практически всегда теперь, тут не нужен установленный в системе
Я конечно далек от мысли...(с)

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Использованию питона в макросах ООо препятствует отсутствие книг и документации.
С basic наоборот все хорошо.
Я сходу могу привести 3-4 источника информации.
- Linux Format 80-83 и есть еще
- Эндрю Питоньяк. OpenOffice.org Объяснение Макросов. — Hentzenwerke Publishing, 2004
- книга Бейна

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
а Вам из всего пайтона и надо то знать только
import os
def shell(x):return "".join(os.popen(x).readlines())

и все, еще с русскими буковами для передачи путей придется иногда думать, но это все будет в Васике
Я конечно далек от мысли...(с)

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
А как дела с uno на питоне ?
А как насчет классов ?

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
а зачем Вам пайтом ?
В контексте сабжа нужен только один пайтоновский скрипт в папке
$(USER)/user/Scripts/python/

(а так вполне все на нем работоспособно, но там нужно работать с контекстом)
Я конечно далек от мысли...(с)

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Использование stdout shell скриптов в OOo макросах
« Ответ #10 : 29 Ноября 2010, 13:07:05 »
А я подумал, что Вы обходитесь без basic.

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: Использование stdout shell скриптов в OOo макросах
« Ответ #11 : 29 Ноября 2010, 17:31:04 »
Basic гораздо удобнее в OOo. Например вы можете получать прямой доступ к псевдосвойсвам таким как например .Model и работать с ними как со свойствами, а из других языков надо будет юзать соответствующие методы.
С другой стороны, может это и плохо - нефиг юзать псевдосвойства...

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Использование stdout shell скриптов в OOo макросах
« Ответ #12 : 30 Ноября 2010, 08:45:34 »
К чему привыкаешь, то и удобно.
Запись макросов осуществляется на basic. Это уже серьезный аргумент в пользу его использования.

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: Использование stdout shell скриптов в OOo макросах
« Ответ #13 : 30 Ноября 2010, 12:13:27 »
Запись макросов на basic осуществляется с использованием диспетчера, имитирующего в последствии действия пользователя. Т.е. операции записанным макросом выполняются не непосредственно с API OOo, а через прослойку-диспетчер связующую API  с ГУИ ООо, что почти всегда не есть хорошо.

Оффлайн alexander.pronin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Использование stdout shell скриптов в OOo макросах
« Ответ #14 : 30 Ноября 2010, 13:23:47 »
То что, записанный макрос не оптимален - это само собой подразумевается, но он рабочий и может быть оптимизирован вручную.
Мне нравится, что не зная всех uno тонкостей, можно быстро сваять достаточно геморойную функцию.
Например, сохранить ods файл как pdf.

 

Страница сгенерирована за 0.022 секунд. Запросов: 22.