OpenOffice.org/Macro/Orientação a objetos

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

editar

Este é 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

editar

Este é 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
  1. Universal Network Objects (UNO), no site wiki.services.openoffice.org
  2. [http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide/API_Intro Introduction to the OpenOffice.org API