OpenOffice.org/Macro/Orientação a objetos
< OpenOffice.org | Macro
O OpenOffice.org tem um interface orientada a objetos, chamada de "Universal Network Objects" (UNO)[1].
Para compreender a orientação a objetos, consulte o livro Programação orientada a objetos.
Em BASIC, a orientação a objetos é feita de duas formas:
- Através da classe Object. Esta é a classe dos principais objetos usados nas macros, desde um objeto genérico que faz quase tudo (StarDesktop), passando pelo documento atual (ThisComponent) até partes do documento.
- Através do UNO (Universal Network Objects)[2]. Por enquanto, pense nos serviços UNO como sendo variáveis definidas através de Type ... End Type com alguma coisa a mais (ou seja, tem o comportamento de classes e objetos).
Exemplo - objetos
editarEste é um exemplo bem simples do que pode ser feito. Suponhamos que tenhamos um documento do Calc, este documento tem uma planilha de nome "Teste", e queremos - por macro - modificar a célula B2 desta planilha.
Uma macro para fazer isso poderia ser assim:
Sub Macro1
Dim teste As Object
teste = ThisComponent.Sheets.GetByName("Teste")
teste.getCellByPosition(1, 1).String = "Alterando este campo"
End Sub
Alguns detalhes:
- A macro acima está em um ponto intermediário entre concisão e prolixidade. É possível reduzí-la apenas ao essencial:
Sub Macro1
ThisComponent.Sheets.GetByName("Teste").getCellByPosition(1, 1).String = "Alterando este campo"
End Sub
Ou é possível criar várias variáveis para mostrar o que está sendo feito:
Sub Macro1
Dim sheets, teste, celula
sheets = ThisComponent.Sheets
teste = sheets.GetByName("Teste")
celula = teste.getCellByPosition(1, 1)
celula.String = "Alterando este campo"
End Sub
- Note-se que, diferentemente das macros do Microsoft Excel, em que "A1" é a célula (1, 1), no Calc o campo "A1" corresponde à célula (0, 0).
Exemplo - UNO
editarEste é um exemplo do que pode ser feito usando-se UNO. Esta macro deve rodar no Draw, e desenha um retângulo vermelho.
Sub CriaDesenho
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = ThisComponent
Page = Doc.DrawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillColor = RGB(255,0,0)
Page.add(RectangleShape)
End Sub
Referências
editar- ↑ Universal Network Objects (UNO), no site wiki.services.openoffice.org
- ↑ [http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide/API_Intro Introduction to the OpenOffice.org API