Установка свойства страницы пейзажной

Автор almaster13, 23 апреля 2025, 11:40

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

almaster13

Столкнулся с простой проблемой, нужно создать новый документ с разметкой страницы для печати не портретной, а пейзажной (положить страницу на бок). Перерыл руководства, но нашел такое свойство только для документов Writer (IsLandscape = true). Прошу помочь, возможно выход лежит на поверхности, как сделать разметку страницы в пейзажном варианте?
Sub Pechat45proz
Dim s$
Dim oStyle

s = ThisComponent.CurrentController.getActiveSheet().PageStyle
oStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(s)
'oStyle.ScaleToPages = 0 'Значение по умолчанию - 0, не масштабировать
oStyle.PageScale = 45

'ThisComponent.Print(Array())

End Sub

mikekaganski

Цитата: almaster13 от 23 апреля 2025, 11:40Перерыл руководства, но нашел такое свойство только для документов Writer (IsLandscape = true).

Требуется огромное трудолюбие, чтобы так экономить свои силы и не попробовать это свойство, не просмотреть объект oStyle в окне Watch, а только искать в руководствах... ;)
С уважением,
Михаил Каганский

almaster13

Да, требуется огромное трудолюбие, чтобы перепробовать все варианты и уткнуться в стену!

oStyle.isLandscape = True - Данная конструкция не работает

mikekaganski

Цитата: almaster13 от 23 апреля 2025, 12:17oStyle.isLandscape = True - Данная конструкция не работает
Работает.
С уважением,
Михаил Каганский

sokol92

Цитата: almaster13 от 23 апреля 2025, 11:40Перерыл руководства, но нашел такое свойство только для документов Writer (IsLandscape = true).
isLandscape

Цитата: almaster13 от 23 апреля 2025, 12:17Данная конструкция не работает
Файл в студию...

Владимир.

almaster13

Направляю файл с макросом. У меня печатает на портретную страницу.

mikekaganski

Цитата: almaster13 от 23 апреля 2025, 13:15У меня печатает на портретную страницу

Так свойство стиля - это не настройки печати. Изменяя стиль, Вы фактически работаете с меню Format->Page Style, а нужно Вам то, что доступно в File->Print.
Если посмотреть документацию метода print, то можно заметить, что он принимает аргумент, описывающий опции печати; там же приведена ссылка на сервис PrintOptions. В последнем есть данные о некоторых свойствах данного сервиса, а также есть ссылки на более подробные документации по модулям - в частности, Calc, где уже можно прочитать про PaperOrientation.
С уважением,
Михаил Каганский

sokol92

В файле (типичная) ошибка - перепутаны местами высота и ширина страницы (Меню / Формат / Стиль страницы / Страница).
Владимир.

almaster13

Цитата: mikekaganski от 23 апреля 2025, 13:28
Цитата: almaster13 от 23 апреля 2025, 13:15У меня печатает на портретную страницу

Так свойство стиля - это не настройки печати. Изменяя стиль, Вы фактически работаете с меню Format->Page Style, а нужно Вам то, что доступно в File->Print.

Так получается, что стиль страницы меняется, в свойствах она указывается, как пейзажная, но при этом, если мы открываем просмотр печати, то видим портретную страницу. Как такое может быть, смотрим в книгу и видим фигу?

mikekaganski

Вы прочитали ответ #7? Вы задали пользовательский размер, у которого альбомная ориентация - с большей стороной вертикально.
С уважением,
Михаил Каганский

almaster13

Вероятно, нужно было более подробно описать проблему. Я создаю макросом новый файл, в него вставляю данные и именно в нем пытаюсь изменить стиль. В итоге стиль меняется в файле источнике. Прошу помочь, может быть, нужно сначала сохранить новый файл и тогда в нем что то менять?
Sub Generation

    Dim noProps()
    Dim InsertProps(5) as new com.sun.star.beans.PropertyValue
 
    InsertProps(0).Name = "Flags"
    InsertProps(0).Value = "SVDNT"
    InsertProps(1).Name = "FormulaCommand"
    InsertProps(1).Value = 0
    InsertProps(2).Name = "SkipEmptyCells"
    InsertProps(2).Value = false
    InsertProps(3).Name = "Transpose"
    InsertProps(3).Value = false
    InsertProps(4).Name = "AsLink"
    InsertProps(4).Value = false
    InsertProps(5).Name = "MoveMode"
    InsertProps(5).Value = 4

   oCDoc = ThisComponent
   
    oCSheet=oCDoc.sheets(0)
    oAdoc=StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
    oADoc.getSheets().insertNewByName("Генерация",0)
    oRange1=oCSheet.getCellRangeByName("A1:Q76")
oCDoc.CurrentController.Select(oRange1)
data=oCDoc.CurrentController.getTransferable
oASheet=oADoc.sheets(0)
oRange2=oASheet.getCellRangeByName("A1:Q76")
'
oADoc.CurrentController.Select(oRange2)
oADoc.CurrentController.insertTransferable(data)
   
  oADoc = ThisComponent
  oASheet=oADoc.sheets(1)
  oACell = oASheet.getCellByPosition(16, 0)
  oACell.SetValue(2345)
 
  Dim s$     'Имя стиля
 Dim oStyle 'Текущий стиль страницы
  s = ThisComponent.CurrentController.getActiveSheet().PageStyle
  oStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(s)
  oStyle.IsLandscape = true
  oStyle.Width = 29700
  oStyle.Height = 21000
  oStyle.LeftMargin = 2000
  oStyle.RightMargin = 1000
 
    End Sub

Файл прилагается.

sokol92

#11
Обратите внимание, что переменная ThisComponent определяется LO в начале работы макроса и дальше не меняется.

Когда Вы загрузили новый документ, Вы его назвали oAdoc. С этого момента oAdoc - новый документ, ThisComponent - исходный документ (тот, где находится макрос).

Уберите строку
oADoc = ThisComponent

и замените в присвоении стиля ThisComponent на oAdoc.

Не следует также присваивать размеры страницы - и так в РФ лист A4 почти всегда установлен по умолчанию.

Пробуйте!

Владимир.

almaster13

Большое спасибо! Все таки всему виной мелочь, но любая мелочь в данном случае полностью меняет все.

sokol92

Общее правило (на собственном опыте) - объектные модели Excel и Calc значительно отличаются друг от друга, так что нужно быть внимательным, особенно тем, кто перехал в LO из Excel VBA.
Владимир.