Обрамление ячеек при помощи макроса [РЕШЕНО]

Автор BotExtraSens, 9 мая 2018, 20:44

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

Bigor

#15
Вот и на "родном" SB

Sub Test_Borders
 Dim aBorder, oRange, oDoc, oSheets
 Dim TableBorder As New com.sun.star.table.TableBorder
 Dim aTopLine As New com.sun.star.table.BorderLine

 oDoc = ThisComponent
 oSheets = oDoc.Sheets(0)
 oRange  = oSheets.getCellRangeByPosition(0,0,5,5)
 aBorder = oRange.TableBorder
 aTopLine.OuterLineWidth = 20 ' это толщина внешней линии в случае двойной рамки
 aTopLine.InnerLineWidth = 0       ' это толщина внутренней линии в случае двойной рамки
 aTopLine.Color = 170000

  aBorder.TopLine = aTopLine
  aBorder.BottomLine = aTopLine
  aBorder.LeftLine = aTopLine
  aBorder.RightLine = aTopLine
  aBorder.HorizontalLine = aTopLine
  aBorder.VerticalLine = aTopLine

for i =1 to 10
  oRange  = oSheets.getCellByPosition(i,i+1)
oRange.Value = i
oRange.TableBorder = aBorder
  'oRange.IsTextWrapped = true
next

End Sub


ps исправил,  разкомментировал oRange  = oSheets.getCellRangeByPosition(0,0,5,5)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

BotExtraSens

#16
Ваш код Рабочий !
Немного модифицировал ваш код под свои нужды

Global i As Integer                                     ' Глобальная Переменная сохраняет свои значения  
Global k As Integer                                     ' даже после завершения макроса пишется выше скобки Sub

Sub Test_Borders                                        ' Макрос Имя
 Dim aBorder, oRange, oDoc, oSheets                    ' Переменные
 Dim TableBorder As New com.sun.star.table.TableBorder ' Переменные
 Dim aTopLine As New com.sun.star.table.BorderLine

 Dim oCell as Object                    ' Dim - обьявление переменной oCell  тип Object
 Dim oSheet as Object                   ' Dim - обьявление переменной oSheet тип Object
     
 oDoc = ThisComponent                                  ' Обращение к Текущему Открытому Документу
 oSheets = oDoc.Sheets(2)                              ' Обращение к № Листа Текущего Документа (Индекс 0 это первый Лист,Индекс 1 это Второй Лист и т.д)
 
 oRange  = oSheets.getCellRangeByPosition(0,0,5,5)    
 aBorder = oRange.TableBorder
 
'****** Оформление ******************************************************************************************************

 aTopLine.OuterLineWidth = 20                          ' это толщина внешней линии в случае двойной рамки
 aTopLine.InnerLineWidth = 0                           ' это толщина внутренней линии в случае двойной рамки
 aTopLine.Color = 170000                               ' Цвет Линии

 aBorder.TopLine = aTopLine                            ' Обрамление Верхней линии Ячейки
 aBorder.BottomLine = aTopLine                         ' Обрамление Нижней линии Ячейки
 aBorder.LeftLine = aTopLine                           ' Обрамление Левой линии Ячейки
 aBorder.RightLine = aTopLine                          ' Обрамление Правой линии Ячейки
 aBorder.HorizontalLine = aTopLine                     ' Обрамление Горизонтальной линии Ячейки                  
 aBorder.VerticalLine = aTopLine                       ' Обрамление Вертикальной линии Ячейки

'*********** Вычисления **************************************************              
 k = 2  
 i = i + 1                                             ' Увеличение значений Глобальной переменной (i) на одну еденицу , при каждом запуске макроса

  oRange  = oSheets.getCellByPosition(i,k)           ' Обращение к Ячейке на Листе   (первый индекс Столбец , второй индекс Строка) - Позицирование
oRange.Value = i                                   ' Присвоение Ячейке значения глобальной Переменной (i) которое будет отображатся в ячейках
oRange.TableBorder = aBorder
  oRange.IsTextWrapped = true

End Sub


Возникли Вопросы :
В моем варианте функционировали Шрифты, Размер текста, Цвет Фона и Текста ячейки


oCell = oSheet.getCellByPosition (i, k)
 oCell.Value = i
 oCell = oSheet.getCellByPosition (i, k)
 oCell.Value = к
 oCell.CellBackColor = RGB(0, 255, 0)   ' Фон ячейки                          (зеленый)
 ocell.CharColor = RGB(255, 0, 0)       ' Цвет Чисел, Букв, Символов, Знаков  (красный).
 ocell.CharFontName = "Courier"         ' Шрифт                                Courier
 ocell.CharFontName = "Bold"            ' Выделение шрифта                     (Жирный)        
 ocell.CharHeight = 14                  ' Высота Чисел, Букв, Символов, Знаков
[/color]

пробовал прикрутить к вашему Макросу , он начал Ругаться (
Как  прикрутить без конфликта чтоб как в посте ниже ?



BotExtraSens

Цитата: economist от 11 мая 2018, 07:04Правильно система ругается, левых скобок вы поставили больше. Копируйте мой код из #12, он рабочий.  
И стоит обрезать мой комментарий, в коде он не нужен. Это то что после символа '

Не обратил внимание
Ваш код Рабочий!
Концепцию вашего варианта вроде понял.
Кое что к ниму прикрутил в качестве доп оформления


Global i As Integer         ' Глобальная Переменная сохраняет свои значения даже после завершения макрос
Global k As Integer        ' Глобальная Переменная сохраняет свои значения даже после завершения макрос
Global h As Integer
Global j As Integer


Option VBASupport 1    ' поддержка совместимости с VBA
Option Compatible                         

Sub Graf

       Dim oDoc as Object                      ' Dim - обьявление переменной oDoc   тип Object
       Dim oCell as Object                      ' Dim - обьявление переменной oCell  тип Object
       Dim oSheet as Object                   ' Dim - обьявление переменной oSheet тип Object


      oDoc=ThisComponent                           ' Обращение к Текущему Открытому Документу
      oSheet = oDoc.sheets (2)                      ' Обращение к № Листа Текущего Документа (Индекс 0 это первый Лист,Индекс 1 это Второй Лист и т.д)
      oCell = oSheet.getCellByPosition (i, k)   ' Обращение к Ячейке на Листе   (первый индекс Столбец , второй индекс Строка) - Позицирование
      oCell.Value = i                                     ' Присвоение Ячейке значения Глобальной переменной (i)
      oCell = oSheet.getCellByPosition (i, k)  ' Обращение к Ячейке на Листе   (первый индекс Столбец , второй индекс Строка) - Позицирование
      oCell.Value = k                                    ' Присвоение Ячейке значения Глобальной переменной (k)
     
      i = i + 1                                             ' увеличение значений глобальной переменной (k) на +1 с каждым запуском макроса
      k = k + 1                                            ' увеличение значений глобальной переменной (k) на +1 с каждым запуском макроса
      j = j + 1
      h = h + 1
     
  oCell.CellBackColor = RGB(0, 255, 0)   ' Фон ячейки                          (зеленый)
  ocell.CharColor = RGB(255, 0, 0)       ' Цвет Чисел, Букв, Символов, Знаков  (красный).
  ocell.CharFontName = "Courier"         ' Шрифт                                Courier
  ocell.CharFontName = "Bold"            ' Выделение шрифта                     (Жирный)         
  ocell.CharHeight = 14                  ' Высота Чисел, Букв, Символов, Знаков   
'===================================================

with Range(Cells(j, i), Cells(h, k)).Borders(xlEdgeLeft) 'Нумерация строк и столбцов в Cells идет с 0,  то есть A1 - это Cells(0, 0)
        .LineStyle = xlContinuous
        .Weight = xlThin

End With

End Sub

Bigor

Цитата: BotExtraSens от 11 мая 2018, 10:20пробовал прикрутить к вашему Макросу , он начал Ругаться (
Как  прикрутить без конфликта чтоб как в посте ниже ?

а на какую строку ругается? и вот это
Цитировать[/color]
зачем? скорее всего на нее и ругается
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

BotExtraSens

Цитата: Bigor от 11 мая 2018, 11:01[/color]
зачем? скорее всего на нее и ругается

Да не
Это я уж тут на сайте так криво оформил код, когда выкладывал
а Ругается на все


  ocell.CharColor = RGB(255, 0, 0)       ' Цвет Чисел, Букв, Символов, Знаков  (красный).
  ocell.CharFontName = "Courier"         ' Шрифт                                Courier
  ocell.CharFontName = "Bold"            ' Выделение шрифта                     (Жирный)         
  ocell.CharHeight = 14                  ' Высота Чисел, Букв, Символов, Знаков

Пишет
Ошибка времени выполнения BASIC.
Объектная переменная не установлена.
 
Озадачился как прикрутить ?

Bigor

У меня в макросе oSheets у тебя oSheet приведи к одному чему нибудь :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

BotExtraSens

Цитата: Bigor от 11 мая 2018, 14:25
У меня в макросе oSheets у тебя oSheet приведи к одному чему нибудь :)
:D  О май Sheet ,  а я то думал у меня оСел слетел  ;D
подправил теперь работает!
:beer:

один вопрос остался

oRange = oSheets.getCellRangeByPosition(0,0,5,5)   
что за параметры  ?
пробовал заменять их на

oRange = oSheets.getCellRangeByPosition(i, k)

Ругается на ошибку

Ошибка времени выполнения BASIC.
Вызвано исключение
Type: com.sun.star.lang.IllegalArgumentException
Message: arguments len differ!.

Bigor

#22
оставь как было, он ни на что не влияет, просто захотелось для aBorder вне цикла значения присвоить, вот и сделал "фиктивный" oRange, что бы aBorder получить :)
если хочешь заменить, то надо:
oRange = oSheets.getCellByPosition(i, k)

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

economist

#23
У диапазона 4 координаты. А в oRange = oSheets.getCellRangeByPosition(i, k) - даны две.  

Вообще такой стиль программирования как "наугад" - в принципе допустим, но только поначалу. LibreOffice довольно неплохо сообщает об ошибках, но их нужно обязательно читать :-)
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

BotExtraSens

Цитата: Bigor от 11 мая 2018, 14:57
оставь как было, он ни на что не влияет, просто захотелось для aBorder вне цикла значения присвоить, вот и сделал "фиктивный" oRange, что бы aBorder получить :)
если хочешь заменить, то надо:
oRange = oSheets.getCellByPosition(i, k)

Цитата: economist от 11 мая 2018, 14:59
У диапазона 4 координаты. А в oRange = oSheets.getCellRangeByPosition(i, k) - даны две. 

Вообще такой стиль программирования как "наугад" - в принципе допустим, но только поначалу. LibreOffice довольно неплохо сообщает об ошибках, но их нужно обязательно читать :-)

Спасибо вам за помощь!  Свой вопрос решил в двух вариантах !!
В первом посте выложил итоговые варианты.
Может кому из новичков пригодится.



economist

Жирность шрифта в коде этой ветки задается неправильно:

oCell.CharFontName = "Bold"  


Правильно так:

oCell.CharWeight = com.sun.star.awt.FontWeight.BOLD

или так:

oCell.CharWeight = 200 ' 100 - обычный
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...