макрос для печати всех файлов в той же папке, в которой находится файл с макросо

Автор OOKapitan, 24 апреля 2017, 13:33

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

OOKapitan

Bigor,
А как сделать, чтобы макрос давал мне выбирать, откуда печатать файл?
Пытаюсь сделать так:
...
Dim sPath
 sPath = getFolder("Please select a folder") & GetPathSeparator()
...



Function getFolder(sTitle AS String, optional sInitDir) AS String
  oPicker = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
  oPicker.setTitle(sTitle)
  if not ismissing(sInitDir) then oPicker.setDisplayDirectory(sInitDir)
  if oPicker.execute() then getFolder = oPicker.getDirectory()
End Function
,
но макрос ничего не печатает.

OOKapitan

Да, файлы, открытые в скрытом виде, не печатаются у меня - баг такой.

rami

Цитата: OOKapitan от 23 августа 2017, 15:36но макрос ничего не печатает.
В строке кода sPath = getFolder("Please select a folder") & GetPathSeparator() не нужен GetPathSeparator() так как путь к папке всегда возвращается с разделителем на конце, а вы ему добавляете ещё один, лишний, который воспринимается как пустая папка без имени и без содержимого. Естественно, из пустой папки нечего печатать.

bigor

Цитата: OOKapitan от 23 августа 2017, 15:18Ваш последний макрос у меня выдаёт ошибку (см. скрин). Помогите исправить, пожалуйста.
Проблема в том, что я поленился и здесь If sFileName <> "print_catalog_2.odt" then указал имя файла с макросом явно. У вас же судя по скрину имя файла print_catalog_2(1).odt, вот он пытается себя еще раз открыть и не может  :(
Выход такой или использовать имя, которое использовал я, или получить имя файла, например из sFileName=ThisComponent.getURL() и использовать его.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 23 августа 2017, 21:35Проблема в том, что я поленился и здесь
Исправил название файла с макросом на print_catalog_2.odt - всё-равно та же ошибка. Помогите, пожалуйста.

bigor

покажите скрин с ошибкой. Скорее всего у вас пробел после _2 остался
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 24 августа 2017, 09:57покажите скрин с ошибкой. Скорее всего у вас пробел после _2 остался
Прилагаю скрин

OOKapitan

Цитата: Bigor от 24 августа 2017, 11:57
И можно ли в Вашем макросе сделать так, чтобы он печатал файлы из папки, которую я выбрал, а не только из C:\printpath?

bigor

Еще один косяк, при открытии файла, создается скрытый файл, его тож надо не пускать на печать. вот исправленный файл, который позволяет выбрать папку из которой хотите печатать.

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 24 августа 2017, 10:18вот исправленный файл, который позволяет выбрать папку из которой хотите печатать.
Увы он печатает только сам себя.
Как же я мог забыть: у меня файлы с расширением xls (экселя). Поправьте код, пожалуйста.

OOKapitan

Попробовал второй раз запустить макрос, выбрал папку - ошибка (см. скрин1)
При этом всегда сразу после выбора пути идёт окно (см. скрин2)

bigor

Я вначале выложил файл с ошибкой, потом минут через 5 его поменял, может вы успели неправильный скачать. В текущем тоже, не закомментировал msgbox в функции getFolder, так что каждый раз при выборе папки он будет сообщение выводить с ее именем.
Если можно растяните стек вызовов, что бы было видно какой файл он пытается открыть и сделайте скрин
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

rami

Попробуйте:
Sub Main
Dim oProps(0) as New com.sun.star.beans.PropertyValue
oProps(0).Name="Hidden"
oProps(0).Value=True        'в скрытом режиме
doc=ThisComponent
fold=convertToURL(replace(convertFromURL(doc.URL),doc.Title,""))
fName=Dir(fold & "*.xls",0) 'ищем только с указанным расширением
s=fName
Do
fName=Dir()
If fName="" Then Exit Do
s=s+chr(10)+fName
Loop
If msgbox(s, 36, "Распечатать документы?")=7 Then Exit Sub
files=split(s,chr(10))
For Each f In files
oDoc=StarDesktop.LoadComponentFromUrl(fold & f, "_blank", 0, oProps())
oDoc.Print(Array())
wait 1000      'явная задержка времени одна секунда
oDoc.close(True)
Next
Print "Готово!"
End Sub

OOKapitan

Цитата: Bigor от 24 августа 2017, 10:58Если можно растяните стек вызовов, что бы было видно какой файл он пытается открыть и сделайте скрин
Скачал Ваш новый файл - всё-равно ошибка. Прикладываю скрин.

OOKapitan

Цитата: rami от 24 августа 2017, 11:56Попробуйте:
Файлы, открытые в скрытом виде, у меня не печатаются. Поправьте Ваш макрос, пожалуйста. Сам смог поправить. Макрос работает отлично. Огромнейшее спасибо!!!!!!! Скажите, пожалуйста, как тут поставить + в репутацию?