Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

14 Декабрь 2017, 01:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Экспорт диапазона ячеек в PDF [РЕШЕНО]  (Прочитано 9260 раз)
0 Пользователей и 1 Гость смотрят эту тему.
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #15: 26 Март 2013, 12:53 »

Экспорт в PDF экспортирует ВСЕ области печати в книге (со всех листов подряд в один файл)
А вот эта "птичка" и предварительный select листа с бирками не решат проблему?

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

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex_Neo
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Полтава
Сообщений: 11



« Ответ #16: 26 Март 2013, 13:14 »

А вот эта "птичка" и предварительный select листа с бирками не решат проблему?
Нет. В экспорт уходят все печатные области.
Если их удалить - пустой лист экспортирует.
Можно попробовать здесь
Код:
oExpFilterOptions = Array(_
               MkPropVal( "InitialView", 0 ),_
               MkPropVal( "PageLayout",  0 ),_
               MkPropVal( "UseTaggedPDF",  False ),_
               MkPropVal( "EncryptFile",  False ),_
               MkPropVal( "DocumentOpenPassword",  "open" ),_
               MkPropVal( "RestrictPermissions", True ),_
               MkPropVal( "PermissionPassword",  "permission" ),_
               MkPropVal( "Printing",  24 ),_
               MkPropVal( "Changes", 4  ),_
               MkPropVal( "EnableCopyingOfContent",  True ),_
               MkPropVal( "EnableTextAccessForAccessibilityTools", True  )_
               )
задать печать диапазона, кажись оно здесь значится как - PrintRange
но у меня не получилось это присобачить.
« Последнее редактирование: 26 Март 2013, 13:33 от Alex_Neo » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #17: 26 Март 2013, 14:14 »

Да нет, в параметрах экспорта, кажется, этого нет...
Что насчет количества печатаемых этикеток? Оно на момент печати известно (может быть вычислено)?
Если да, то останется сделать только это
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex_Neo
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Полтава
Сообщений: 11



« Ответ #18: 26 Март 2013, 15:39 »

Что насчет количества печатаемых этикеток? Оно на момент печати известно (может быть вычислено)?
Да, такую инфу можно получить.
А как задать подсчет диапазона в макросе??
В макрос формулу можно писать?? типа INT((Вантаж.B3+7)/8)        (в Вантаж.B3 кол-во стикеров, здесь кол-во стикеров)

Попробовал прописать свой случай

Код:
Sub PrintSpreadsheetAreas

Dim oCountLists
Dim oRanges(0) As New com.sun.star.table.CellRangeAddress

oCountLists = ThisComponent.Sheets(2).getCellByPosition(1, 2)         'Ячейка Вантаж.B3


rem здесь я что-то такое накуралесил О_о

area = createUnoService( "com.sun.star.sheet.FunctionAccess" )

       ' посчитать кол-во колонок в области
       arg = array(oCountLists)
       area.callFunction( "INT", (arg+7)/8*7 )

oRanges(0).Sheet = 5                      'КАК ЗДЕСЬ ЗАДАТЬ ИМЯ ЛИСТА ГДЕ ЗАДАВАТЬ ОБЛАСТЬ???
oRanges(0).StartColumn = 0 : oRanges(0).StartRow = 0 'A1
oRanges(0).EndColumn = area : oRanges(0).EndRow = 37 'D5

ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges())

End Sub


и еще у меня прикол с диапазонами
у меня 8 листов, на 2-х определены области печати
я хочу их удалить
 - удаляю с первого листа область, она удаляется
 - удаляю со второго листа область, она НЕ удаляется и в то же время определяются области печати для всех 8-и листов (которые мне не нужны)
 - после этих действий не одну область не дает удалить, пункт в меню не активен.  Шокирован
Либр - 3,6, щас  попробую обновить до 4,0,1 может пройдет.
Нет. таже беда. Шокирован
« Последнее редактирование: 26 Март 2013, 16:44 от Alex_Neo » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #19: 26 Март 2013, 17:32 »

oCountLists = ThisComponent.Sheets(2).getCellByPosition(1, 2)         'Ячейка Вантаж.B3
Ну да, именно ячейка. А тебе для вычислений нужно получить её значение. Поэтому нужно еще дописать .getValue()
area = createUnoService( "com.sun.star.sheet.FunctionAccess" )
       ' посчитать кол-во колонок в области
       arg = array(oCountLists)
       area.callFunction( "INT", (arg+7)/8*7 )
Нет-нет, все гораздо проще
Код:
Sub setPrintAreas()
Dim workDoc As Variant
Dim oSheets As Variant
Dim oSheet As Variant
Dim nRows&, nColumns&, nStickers&
Dim aRangeAddress As New com.sun.star.table.CellRangeAddress
workDoc = ThisComponent
oSheets = workDoc.getSheets()
nStickers = oSheets.getByName("Вантаж").getCellByPosition(1, 2).getValue()
nRows = 38 ' Столько строк было на скриншоте
nColumns = INT((nStickers+7)/8)*4 ' По 4 колонки на лист
oSheet = oSheets.getByName("Стікери")
REM Здесь цифры могут быть произвольные - вместо последней строки и последней колонки
REM сейчас подставим вычисленные значения nRows и nColumns
aRangeAddress = oSheet.getCellRangeByPosition(0, 0, 3, 37).getRangeAddress()
aRangeAddress.EndColumn = nColumns - 1
aRangeAddress.EndRow = nRows - 1
oSheet.setPrintAreas(Array(aRangeAddress))
End Sub
oRanges(0).Sheet = 5                      'КАК ЗДЕСЬ ЗАДАТЬ ИМЯ ЛИСТА ГДЕ ЗАДАВАТЬ ОБЛАСТЬ???
А никак ты здесь ИМЯ не задашь - .Sheet это целая переменная, строковое имя туда никак не запихнешь
и еще у меня прикол с диапазонами
у меня 8 листов, на 2-х определены области печати
я хочу их удалить
 - удаляю с первого листа область, она удаляется
 - удаляю со второго листа область, она НЕ удаляется и в то же время определяются области печати для всех 8-и листов (которые мне не нужны)
Ну, не совсем так... После удаления второй (и последней в этой книге) области печати, Calc предлагает печатать всю информацию из книги. А поставил бы "птичку", о которой я говорил раньше - предлагал бы печатать только все данные текущего (выделенного в данный момент) листа.
- после этих действий не одну область не дает удалить, пункт в меню не активен.  Шокирован
Ну да, областей же печати больше нет, что удалять? Вот пункт и не активен
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex_Neo
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Полтава
Сообщений: 11



« Ответ #20: 26 Март 2013, 18:08 »

 Всё хорошо ЗАЧЁТ!!!! Все робыть!


А поставил бы "птичку", о которой я говорил раньше - предлагал бы печатать только все данные текущего (выделенного в данный момент) листа.
Стоит "галочка", но экспортирует все равно ВСЕ диапазоны.

Ну да, областей же печати больше нет, что удалять? Вот пункт и не активен
неее... он на ВСЕХ листы задает области печати, но удалять их не дает  Непонимающий

а как сделать так чтобы после того как он задаст область на текущем листе на всех остальных эти области удалить, типа
Код:
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())
только на неактивных листах???
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #21: 26 Март 2013, 18:28 »

А ты сначала удали НА ВСЕХ листах - укажи пустой массив в качестве параметра:
Код:
For i = 0 To oSheets.getCount()-1
oSheets.getByIndex(i).setPrintAreas(Array())
Next i
А уже потом установи нужный
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex_Neo
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Полтава
Сообщений: 11



« Ответ #22: 27 Март 2013, 15:25 »

А ты сначала удали НА ВСЕХ листах - укажи пустой массив в качестве параметра:
Код:
For i = 0 To oSheets.getCount()-1
oSheets.getByIndex(i).setPrintAreas(Array())
Next i
А уже потом установи нужный

Этот вариант я не допер как прикрутить, нашел вот такое
Код:
For index = 0 to Ubound(thisComponent.getSheets.getElementNames)

  oSheet = ThisComponent.Sheets.getByIndex(index)
  ThisComponent.CurrentController.setActiveSheet(oSheet)
  document = ThisComponent.CurrentController.Frame
  dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0,Array())    
  
Next index
с этим замечательно работает.
Спасибо большое за помощь в этом нелегком (для меня) деле  Всё хорошо
« Последнее редактирование: 27 Март 2013, 15:27 от Alex_Neo » Записан
mdr
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #23: 2 Октябрь 2013, 06:48 »

Sub CellRangePDF
dim Arg(0) as new com.sun.star.beans.PropertyValue
dim args2(1) as new com.sun.star.beans.PropertyValue

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Лист1")
CellRange = Sheet.getCellRangeByName("$B$2:$E$18")

Arg(0).Name = "Selection"
Arg(0).Value = CellRange

args2(0).Name = "FilterName"
args2(0).Value = "calc_pdf_Export"
args2(1).Name = "FilterData"
args2(1).Value = Arg()

Doc.storeToURL("file:///c:/cellrange.pdf",args2())
End Sub

в этом макросе выгружается один диапазон $B$2:$E$18. Как выгрузить два диапазона $A$1:$B$20 и $D$1:$F$20
Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!