Элементы управления на листе Calc

Автор ASP, 3 марта 2025, 23:35

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

ASP

Добрый вечер. Помогите пожалуйста разобраться. Есть лист в Calc, на нем есть элементы управления (Кнопки, текстовой поле), необходимо макросом сменить надпись на на элементе управления и считать/привязать элемент управления к ячейке. Размер кнопки, цвет, имя получается сменить, а вот с надписью на кнопке какая-то беда.
Образец файла прилагается.

sokol92

#1
Добрый день!
В прилагаемом макросе к имени каждой кнопки добавляется ее индекс в объекте Drawpage листа и выводится информация о свойстве Anchor каждого элемента управления и Label каждой кнопки.

Для привязки фигуры к ячейке или странице (листу) нужно изменить свойство Anchor.

Sub Test
  Dim oSheet as Object, oDrawPage As Object, oShape As Object
  Dim i As Long, s As String
 
  oSheet=ThisComponent.Sheets.getByName("Лист1")
  oDrawPage=oSheet.DrawPage
 
  For i=0 To oDrawPage.Count - 1
    oShape=oDrawPage.getByIndex(i)   ' можно и oDrawPage(i)
    If HasUnoInterfaces(oShape, "com.sun.star.drawing.XControlShape") Then   ' тип - элемент управления
      s=""  ' информация об объекте
      s="Anchor: " & oShape.Anchor.AbsoluteName    ' адрес диапазона, к которому привязана ячейка
      oControl=oShape.Control
       
     ' к тексту на кнопке добавляем ее индекс в DrawPage
      If oControl.supportsService("com.sun.star.form.component.CommandButton") Then  ' тип элемента управления - кнопка
        oControl.Label=oControl.Label & i
        s= s & Chr(10) & "Label: " & oControl.Label
      End If 
     
      Msgbox s
    End If ' элемента управления
  Next i
End Sub
Владимир.

ASP


ASP

получить адрес привязки получилось. а вот как назначить ячейку, к которой необходимо привязать кнопку/текстовое поле, желательно к размеру ячейки.
нашел вот такой метод getValueBinding, но применить его не получилось.

sokol92

В условиях предыдущего примера привяжем кнопку с именем модели "Кнопка 1" к ячейке E3. При изменении размеров ячейки кнопка должна также менять свои размеры.

Sub Test2
  Dim oSheet as Object, oCell as Object, oDrawPage As Object, oShape As Object
  Dim i As Long
 
  oSheet=ThisComponent.Sheets.getByName("Лист1")
  oDrawPage=oSheet.DrawPage
 
  For i=0 To oDrawPage.Count - 1
    oShape=oDrawPage.getByIndex(i)   ' можно и oDrawPage(i)
    If HasUnoInterfaces(oShape, "com.sun.star.drawing.XControlShape") Then   ' тип - элемент управления
      oControl=oShape.Control
      If oControl.supportsService("com.sun.star.form.component.CommandButton") Then  ' тип элемента управления - кнопка
     
        If oControl.Name="Кнопка 1" Then
          oCell=oSheet.getCellByPosition(8, 2)          ' ячейка E3
          oShape.Position=oCell.Position                ' положение фигуры на листе
          oShape.Size=oCell.Size                        ' размер фигуры равен размеру ячейки
          oShape.Anchor=oCell                           ' привязка к ячейке
          oShape.ResizeWithCell=True                    ' меняем размер вместе с ячейкой
        End If         
       
      End If
    End If ' элемента управления
  Next i
End Sub
Владимир.

ASP