Не нужная печать обрамления пустых ячеек

Автор Burardus, 5 апреля 2019, 10:11

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

Burardus

Всем, добрый день!

Компонент: Calc
Сборка: LibreOffice Версия: 6.2.1.2 (x64)
ID сборки: 7bcb35dc3024a62dea0caee87020152d1ee96e71
ОС: Windows 7 x64 prof

Есть сгенерированные отчёты fast reports в формате excel xlsx, при открытии в Calc пустые ячейки имеют обрамление красным цветом, я так понимаю, что это генератор отчётов так делает, но к сожалению, нет возможности это поправить. В этом и проблема, что это всё выводится на печать. В excel, как я понял, происходит переопределение стиля оформления пустой ячейки, т.е. красное обрамление пустых ячеек заменяется на "без обрамления". Потому что если открыть в excel этот отчёт и просто сохранить его, не делая никаких изменения, то в Calc уже эти пустые ячейки без обрамления красным цветом.

Пока решаем в Calc так: f11 - на стандартном стиле ПКМ - Изменить - Положение линий/Предустановки/Убрать обрамление.

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

Вложением:

1.xlsx - образец отчёта.
1.pdf - как печатает по-умолчанию.
2.pdf - нужная печать.

Всем, заранее спасибо за помощь!

rami

Цитата: Burardus от  5 апреля 2019, 10:11Можно как - то это "автоматизировать", чтобы при открытии документа происходило нечто похожее на обработку пустых ячеек "как в excel"?
"Как в excel" у вас уже есть, теперь попробуйте "как в Calc", в каждом подобном документе выполните макрос (наверно, лучше назначить его на панель инструментов или в меню):
Sub restore_to_default
Dim oDefaultStyle, oDefaultBorderLine As New com.sun.star.table.BorderLine
oDefaultStyle=ThisComponent.StyleFamilies.getByName("CellStyles").getByName("Default")
oDefaultStyle.BottomBorder=oDefaultBorderLine
oDefaultStyle.LeftBorder=oDefaultBorderLine
oDefaultStyle.RightBorder=oDefaultBorderLine
oDefaultStyle.TopBorder=oDefaultBorderLine
End Sub

Burardus

Добрый день!

Проверил, то, что нужно! А можете написать макрос, чтобы он: 1) сначала обрабатывал пустые ячейки 2) и следом вызывал стандартное окно печати (Ctrl+P)?

Было бы отлично сделать отдельную кнопку печати документов с таким функционалом.

Заранее спасибо!

rami

Для вызова окна печати добавьте в конце предыдущего макроса (перед End Sub):
Dim disp
disp = createUnoService("com.sun.star.frame.DispatchHelper")
disp.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array())

bigor

Цитата: Burardus от  5 апреля 2019, 11:42Было бы отлично сделать отдельную кнопку печати документов с таким функционалом.

Окно печати обязательно? Вы там делаете какие-то настройки печати. Или можно сразу все отправлять на принтер
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Burardus

Цитата: rami от  5 апреля 2019, 12:11
Для вызова окна печати добавьте в конце предыдущего макроса (перед End Sub):
Dim disp
disp = createUnoService("com.sun.star.frame.DispatchHelper")
disp.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array())


Большое спасибо, то что просил!

Цитата: Bigor от  5 апреля 2019, 12:12
Цитата: Burardus от  5 апреля 2019, 11:42Было бы отлично сделать отдельную кнопку печати документов с таким функционалом.

Окно печати обязательно? Вы там делаете какие-то настройки печати. Или можно сразу все отправлять на принтер

Хотел задублировать "стандартное поведение пользователя", обычно щёлкают по кнопке печати с панели инструментов. Но Ваш вариант, тоже интересен, если не сложно опишите его. Будет больше способов решить задачу.

Заранее спасибо!

bigor

#6
как-то так:
sub Print_test
Dim oOpts(0) as New com.sun.star.beans.PropertyValue
Dim oRanges(0) As New com.sun.star.table.CellRangeAddress

 sh1=ThisComponent.Sheets(0)
' Если нужно задать область печати  
' oRanges(0).Sheet = 0
' oRanges(0).StartColumn = 0 : oRanges(0).StartRow = 0 'A1
' oRanges(0).EndColumn = 5 : oRanges(0).EndRow = 5 'f6
'
ThisComponent.CurrentController.setActiveSheet(sh1)  ' Активируем первый лист
'        ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges()) ' задает область печати

oOpts(0).Name = "Wait"   ' Параметры печати
oOpts(0).Value = True      ' Параметры печати
       
      ThisComponent.Print(oOpts()) ' Печатаем на принтере по умолчанию
 End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут