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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Обрамление ячеек при помощи макроса [РЕШЕНО]  (Прочитано 2149 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Bigor
Старожил
****
Offline Offline

Пол: Мужской
Сообщений: 286


« Ответ #15: 11 Май 2018, 09:13 »

Вот и на "родном" 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)
« Последнее редактирование: 11 Май 2018, 12:12 от Bigor » Записан
BotExtraSens
Новичок
*
Offline Offline

Сообщений: 18


« Ответ #16: 11 Май 2018, 12:20 »

Ваш код Рабочий !
Немного модифицировал ваш код под свои нужды
Код:
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]
пробовал прикрутить к вашему Макросу , он начал Ругаться (
Как  прикрутить без конфликта чтоб как в посте ниже ?


« Последнее редактирование: 11 Май 2018, 12:45 от BotExtraSens » Записан
BotExtraSens
Новичок
*
Offline Offline

Сообщений: 18


« Ответ #17: 11 Май 2018, 12:43 »

Правильно система ругается, левых скобок вы поставили больше. Копируйте мой код из #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
Старожил
****
Offline Offline

Пол: Мужской
Сообщений: 286


« Ответ #18: 11 Май 2018, 13:01 »

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

а на какую строку ругается? и вот это
Цитата:
[/color]
зачем? скорее всего на нее и ругается
Записан
BotExtraSens
Новичок
*
Offline Offline

Сообщений: 18


« Ответ #19: 11 Май 2018, 13:29 »

[/color]
зачем? скорее всего на нее и ругается

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

Код:
  ocell.CharColor = RGB(255, 0, 0)       ' Цвет Чисел, Букв, Символов, Знаков  (красный).
  ocell.CharFontName = "Courier"         ' Шрифт                                Courier
  ocell.CharFontName = "Bold"            ' Выделение шрифта                     (Жирный)         
  ocell.CharHeight = 14                  ' Высота Чисел, Букв, Символов, Знаков
Пишет
Ошибка времени выполнения BASIC.
Объектная переменная не установлена.
 
Озадачился как прикрутить ?
Записан
Bigor
Старожил
****
Offline Offline

Пол: Мужской
Сообщений: 286


« Ответ #20: 11 Май 2018, 14:25 »

У меня в макросе oSheets у тебя oSheet приведи к одному чему нибудь Улыбка
Записан
BotExtraSens
Новичок
*
Offline Offline

Сообщений: 18


« Ответ #21: 11 Май 2018, 14:50 »

У меня в макросе oSheets у тебя oSheet приведи к одному чему нибудь Улыбка
Веселый  О май Sheet ,  а я то думал у меня оСел слетел  Смеющийся
подправил теперь работает!
Всё хорошо

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

Код:
oRange = oSheets.getCellRangeByPosition(i, k)
Ругается на ошибку
Код:
Ошибка времени выполнения BASIC.
Вызвано исключение
Type: com.sun.star.lang.IllegalArgumentException
Message: arguments len differ!.
Записан
Bigor
Старожил
****
Offline Offline

Пол: Мужской
Сообщений: 286


« Ответ #22: 11 Май 2018, 14:57 »

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

« Последнее редактирование: 11 Май 2018, 15:00 от Bigor » Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 904


« Ответ #23: 11 Май 2018, 14:59 »

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

Вообще такой стиль программирования как "наугад" - в принципе допустим, но только поначалу. LibreOffice довольно неплохо сообщает об ошибках, но их нужно обязательно читать :-)
« Последнее редактирование: 11 Май 2018, 15:01 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
BotExtraSens
Новичок
*
Offline Offline

Сообщений: 18


« Ответ #24: 12 Май 2018, 20:56 »

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

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

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

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


Записан
Страниц: « 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!