Pular para o conteúdo principal

LibreOffice Workbook Planilha e Processamento de Celular Usando Macro

Este tutorial foi retirado do site Debugpoint, não mudei nada nenhuma linha de comando, apenas traduzir a explicação do tutorial e espero que ajudem a todos.

Aplicativos de planilha como Calc consiste em pastas de trabalho, planilhas e células individuais. Muitas vezes é necessário para processar aqueles que usam macros para automatizar várias tarefas.

Neste tutorial, vamos demonstrar o processamento básico de planilhas, células, que é uma fundação de muitas macros complexas.

Declaração de exercício

Vamos ler uma planilha Calc com 3 folhas, um após o outro e ler o conteúdo do mesmo. Depois de ler, vamos mostrar o conteúdo de leitura formatados em uma janela de mensagem.

Plan1, Plan2 e Sheet3 contém dados abaixo:

LO_Trav_demo1 

LO_Trav_demo2 

LO_Trav_demo3 

Detalhes código

Em primeiro lugar, vamos declará-3 objetos para definir a pasta de trabalho Calc, coleta de folhas e um celular.

dim my_doc   as object
Dim my_sheets as object
Dim my_cell as object 

Definir my_doc usando ThisComponent que se refere ao atual pasta de trabalho Calc é aberto. Uma vez feito isso, a coleção Sheets é atribuído a my_sheets objeto para acessar todas as folhas do workbook (livro). Todas as folhas é atribuído ao objeto my_sheets como uma matriz. Para acessá-los, temos que usar subscrito como Sheets (0), Folhas (1) assim por diante. Observe que começa subscrito em zero. 

my_doc = ThisComponent
my_sheets = my_doc.Sheets
sheet_count = my_sheets.Count 

Uma vez que temos uma alça de uma folha usando Sheets (subscrito), podemos acessar cada células individuais usando método getCellByPosition. Maneira típica de acessar uma célula como abaixo.  

my_cell = ThisComponent.Sheets(i).getCellByPosition(col,row) 

Note que os primeiros argumentos de getCellByPosition é a coluna e depois linha.

Depois de obter o objeto de célula my_cell está definido, temos de acessar seu conteúdo. LibreOffice tem uma opinião diferente sobre ela. Cada célula individual é definido por seu tipo de conteúdo. Se você colocar um número em uma célula torna-se de tipo de número e se você colocar chracters sobre ele, torna-se do tipo de texto. LibreOffice fornece uma lista de enumerações para Cell.Type como abaixo:

com.sun.star.table.CellContentType.VALUE (Usado para células que contêm números)
com.sun.star.table.CellContentType.TEXT (Usado para células que contêm caracteres)
com.sun.star.table.CellContentType.EMPTY (Usado para células vazia)
com.sun.star.table.CellContentType.FORMULA (Usado para células que contêm fórmula)

Para acessar os valores de célula neste exemplo, usaríamos abaixo trecho.

Select Case my_cell.Type
 Case com.sun.star.table.CellContentType.VALUE
   cell_value = my_cell.Value
 Case com.sun.star.table.CellContentType.TEXT
   cell_value = my_cell.String
End Select 

Run:

Estou indo para concatenar cada valores das células de uma maneira formatada e mostrar em uma caixa de mensagem. Após a corrida, todos os valores das células de todas as folhas como mostrado abaixo.
Consulte a seção "código completo 'abaixo.

LO_Trav_demo4  

Código Completo:

Sub processing_sheets_cells

    dim my_doc   as object
    Dim my_sheets as object
    Dim my_cell as object

    Dim sheet_count, i, row, col, cell_value, str

    my_doc = ThisComponent
    my_sheets = my_doc.Sheets
    sheet_count = my_sheets.Count

    for i = 0 to sheet_count - 1       
        str = str & chr(13) & "--------" & chr(13) 
        for row=1 to 4
                for col=0 to 1
                    my_cell = ThisComponent.Sheets(i).getCellByPosition(col,row)
                    Select Case my_cell.Type
                        Case com.sun.star.table.CellContentType.VALUE
                            cell_value = my_cell.Value
                        Case com.sun.star.table.CellContentType.TEXT
                            cell_value = my_cell.String
                    End Select
                    str = str & " " & cell_value
                next col
                str = str & Chr(13)
        next row
    next i
    msgbox str

End Sub 

Fonte: DebugPoint

Comentários