Libreoffice (Material para essa suíte)

Olá pessoal, queria tirar uma dúvida com vocês, estou migrando do Excel para usar o Calc, trabalho em um escritório de Contabilidade e estou tentando migrar para o Calc, minha dúvida é aonde posso encontrar materiais desse software já pesquisei no youtube, google e não achei nada. Infelizmente só acho conteúdo de Excel no no youtube, mas de Libreoffice acho pouca coisa. Espero também conseguir substituir o Excel no meu trabalho para usar o Libreoffice Calc.

Ps: se tiver conteúdo pode ser em Inglês também.

1 curtida

Pergunta de um milhão de “Dolores”: tu usa planilhas xlsm e/ou xlsb? Se sim, infelizmente o Calc não será uma boa alternativa. Dito isso, você baixou as fontes MS já? Só para garantir de ter compatibilidade com as fontes que possam vir das planilhas do seu serviço e você mandar para eles. Better safe than sorry.

Achei um vídeo que, talvez, possa ajudar: Libre Office 7 Calc Spreadsheets Beginners Tutorial - YouTube
E um material mais condensado, digamos assim: LibreOffice Calc Tutorial - libreofficehelp.com

1 curtida

Uso os dois tipos, embora eu estaria disposto a mudar todas as minhas planilhas do zero mesmo, a minha questão seria mesmo conteúdo.

Hoje em dia a maioria das coisas fazemos em Softwares contábil, uma coisa ou outro usamos excel, por isso estou disposto a aprender a usar o Calc, eu já uso o Pop Os em casa.

Visto que eatou começando a usar Python, então acho que iria me ajudar muito tbm combinar Python com Libreoffice Calc ou qualquer outra ferramenta.

Melhor lugar pra vc encontrar conteúdo sobre o Libre Office é no próprio site, na parte de ajuda.

1 curtida

Obrigado amigo vou procurar, estava pesquisando e achei a Libreoffice Magazine.

1 - Pesquise o Manual no Google ou dentro do próprio site do libreoffice.

2 - Dentro do Calc, clique em Ajuda > Ajuda do Libreoffice (ou simplesmente clique em F1.

3 - Tem esse curso aqui no Youtube. É uma playlist com 29 aulas:

4 - Esse canal aqui tem muitos tutoriais úteis:

5 - Guia oficial do Calc
https://documentation.libreoffice.org/assets/Uploads/Documentation/pt-br/CG70/CG70-CalcGuide-Master.pdf

6 - Sempre que for pesquisar algo sobre o Calc, digite “Libreoffice Calc” ao invés de somente “Calc” para obter melhores resultados na sua pesquisa

4 curtidas

Acho que fica mais fácil conseguir ajuda se especificar qual tipo de material vc busca.
Vc procura tutoriais básicos de interface, uso de fórmulas ou de uso de macros?

Se já domina o excel, acho que é simples fazer a mudança. Não trabalho com contabilidade, mas quando decidi migrar no começo quebrei um pouco a cabeça com a interface. Para ter sucesso na migração eu fui refazendo minhas planilhas e documentos um a um no calc e no writer. E assim fui aprendendo a mexer, aquilo que não sabia ia no forum ask do libreoffice, (apartir de agosto vai migrar pro discord). Acho que é a melhor maneira.

Acho que vc precisa entender que o libreoffice foi pensado para trabalhar com estilos de formatação. Essa é a primeira mudança de paradigma. Até a orientação das páginas deve ser definida por estilos. Não é igual no MS Office que basta apenas deixar uma página como retrato e outra como paisagem no mesmo documento. No libreoffice vc precisar criar um estilo retrato (padrão) e outro estilo de página paisagem, e só então aplicar esses estilos em cada umas das folhas/planilhas.

Tenha em mente que o calc é inferior ao excel, no calc não existe a opção de inserir tabela igual no excel. Isso é o que faz mais falta para o usuário comum. E algumas fórmulas que estão no excel não existem no calc.

para macros em python sugiro esses videos do Mauricio, estão em espanhol, está facil de entender pois ele não fala muito rápido.

Ele dispersa bastante nas oficinas, mas tem muito conhecimento de macros, vale muito a pena assistir todos apesar de alguns serem muito avançados.

https://vimeo.com/404119836

https://vimeo.com/413812208
https://vimeo.com/416106611
https://vimeo.com/418663089
https://vimeo.com/421263845
https://vimeo.com/423783793
https://vimeo.com/426028105
https://vimeo.com/428273490
https://vimeo.com/430511573
https://vimeo.com/432638643
https://vimeo.com/435118418
https://vimeo.com/445315266
https://vimeo.com/447580513
https://vimeo.com/449717208
https://vimeo.com/453164654

Obs: nos videos o Mauricio Baeza salvou as macros no computador dele, no diretório padrão de macros do libreoffice, para linux

/home/MY_USER/.config/libreoffice/4/user/Scripts/python

No linux sugiro que instale esses pacotes:

$sudo apt install ttf-mscorefonts-installer -y
$sudo apt-get install libreoffice-style-* -y
$sudo apt-get install libreoffice-script-provider-python -y
$sudo apt-get install python3-uno -y

Para macros em python instale essas 3 extensões:

apso.oxt · master · Jean-Marc Zambon / apso · GitLab
Releases - elmau/zaz-pip - Git para Cuates
Release Version 1.3.4 · hanya/MRI · GitHub

Se já entende um pouco de python esse tutorial já te dá um começo:
https://wiki.documentfoundation.org/Macros/Python_Guide
https://wiki.documentfoundation.org/Macros/Python_Guide/Calc

Quadro comparativo de como são alguns termos no python e como são em basic
https://help.libreoffice.org/6.3/pt/text/sbasic/python/python_programming.html?&DbPAR=WRITER&System=Unknown%20OS

Esse é um tutorial excelente de python no libreoffice, mas não usa a extensão APSO. Ele embute o script python manualmente no documento do libreoffice, a extensão APSO embute de forma automática.

siga esse tutorial acima e já vai ter uma boa idéia inicial de como são as macros em python.


Quando já estiver mais avançado pode usar o py3o.template, é um módulo python que insere conteúdo em um documenot libreoffice preexistnete (template) pode usar direto pelo python ou através de uma macro python em outro documento libreoffice (via ZAZpip).
Exemplo pode ter uma planinha do calc que exporta alguns valores para um documento do writer, tipo uma mala direta.

py3o.template · PyPI
Welcome to py3o.template’s documentation! — py3o.template 0.9.10 documentation
example · branch/default · florent.aide / py3o.template · GitLab

1 curtida

Aqui um video de como usar a extensão APSO, que é responsável por embutir a macro no documento do libreoffice:

obs: usei o VS Code como editor de python
obs2: usei um código template com as funções mais comuns, assim sempre que crio uma macro já insere esse template no meu arquivo

obs3: para usar uma macro em python é igual em basic, ex: escreve sua macro no editor externo, depois insere um botão e adiciona a macro no evento do clique do mouse


Fiz um arquivo de exemplo para vc estudar com as operações básicas de macros em pyhton no calc:

Código do ‘Content of new module’ com as funções básicas

# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
import uno
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS

from pathlib import Path

'''+===================+
   | Variáveis Globais |
   +===================+'''
CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
#---


def create_instance(name, with_context=False):
    if with_context:
        instance = SM.createInstanceWithContext(name, CTX)
    else:
        instance = SM.createInstance(name)
    return instance


def openConsole(event=None):
    """ 
        https://extensions.libreoffice.org/extensions/apso-alternative-script-organizer-for-python
    """
    create_instance("apso.python.script.organizer.impl")
    from apso_utils import console
    #console()
    console(BACKGROUND=0x0, FOREGROUND=0xD3D7CF)
    return


def closeConsole(*args):
    import theconsole
    try:
        theconsole.console.enddialog()
    except AttributeError:
        pass


def msg(message, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='INFOBOX'):
    """ MSG_BUTTONS = BUTTONS_OK = 1, BUTTONS_OK_CANCEL = 2, BUTTONS_YES_NO = 3, BUTTONS_YES_NO_CANCEL = 4, BUTTONS_RETRY_CANCEL = 5, BUTTONS_ABORT_IGNORE_RETRY = 6

        https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1awt_1_1MessageBoxButtons.html
        type_msg = MESSAGEBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX
        https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1awt.html#ad249d76933bdf54c35f4eaf51a5b7965
    """
    toolkit = create_instance('com.sun.star.awt.Toolkit')
    parent = toolkit.getDesktopWindow()
    mb = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message)+'\n\n')
    return mb.execute()


def call_dispatch(doc, url, args=()):
    """ 
        https://wiki.documentfoundation.org/Development/DispatchCommands
    """
    frame = doc.getCurrentController().getFrame()
    dispatch = create_instance('com.sun.star.frame.DispatchHelper')
    dispatch.executeDispatch(frame, url, '', 0, args)
    return


def _toProperties(**kwargs):
    """
        função auxiliar para call_dispatch, quando ela usa argumentos, ex de quando é usada:
        call_dispatch(doc, '.uno:InsertDoc', _toProperties(Name='arquivo.odt', Filter='writer8'))

        O retorno dessa função será uma tupla de dicionários ({key1='valor1'}, {key2='valor2'}, ....)
    """
    props = []
    for key in kwargs:
        prop = PropertyValue()
        prop.Name = key
        prop.Value = kwargs[key]
        props.append(prop)
    return tuple(props)
#=========================================================================================
#Fim do 'Content of new module' {código template com as funções mais comuns}
#*****************************************************************************************

Aqui o código da macro propriamente dita:

def mostrar_infos(*args):
    openConsole()
    doc = XSCRIPTCONTEXT.getDocument()

    planilha_ativa = doc.CurrentController.ActiveSheet
    nome_ativa = planilha_ativa.Name

    sheets = doc.getSheets()
    total_de_folhas = len(sheets)
    
    this_doc_url = doc.URL
    this_doc_path = uno.fileUrlToSystemPath(this_doc_url)
    absolute_path = Path(this_doc_path).parent

    str_doc_path = str(this_doc_path)
    str_absolute_path = str(absolute_path)

    print(nome_ativa)
    print(total_de_folhas)
    print(str_doc_path)
    print(str_absolute_path)

    mymessage = f'''Nome da panilha atual: {nome_ativa}\n
Número total de abas 'planilhas': {str(total_de_folhas)}\n
Caminho do documento: {str_doc_path}\n
Diretório do documento: {str_absolute_path}'''

    msg(mymessage, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='INFOBOX')


def print_dialog(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    call_dispatch(doc, '.uno:Print')


def criar_documento_em_branco(*args):
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    if not hasattr(model, "Text"):
        document = desktop.loadComponentFromURL("private:factory/swriter","_blank", 0, () )


def abrir_documento(caminho_arquivo):
    arquivo = Path(caminho_arquivo)
    if arquivo.is_file():
        try:
            desktop = XSCRIPTCONTEXT.getDesktop()
            myFileUrl = uno.systemPathToFileUrl(str(arquivo))
            document = desktop.loadComponentFromURL(myFileUrl, '_blank', 0, ())
        except Exception as e:
            mymessage = f'''Erro ao abrir arquivo\n{e}'''
            msg(mymessage, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='ERRORBOX')

    else:
        mymessage = f'''Esse arquvio não existe:\n{caminho_arquivo}'''
        msg(mymessage, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='ERRORBOX')


def abrir_doc_existente(*args):
    #meu_arquivo = '/home/MEU_USUARIO/qualquer.ods'
    meu_arquivo = str(Path.home() / 'qualquer.ods')
    print(meu_arquivo)
    
    abrir_documento(meu_arquivo)

def ler_celula(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheets = doc.getSheets()

    planConfig = sheets.getByName('Configuração')
    mycelula = planConfig['A2']

    conteudo_celula = mycelula.getString()
    msg(conteudo_celula)


def ler_range(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    planilha_ativa = doc.CurrentController.ActiveSheet
    myrange = planilha_ativa.getCellRangeByName('A2:C4')

    conteudo_matriz = myrange.getDataArray()
    print(type(conteudo_matriz))
    print(conteudo_matriz)

    msg(str(conteudo_matriz))


def escrever_range(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    planilha_ativa = doc.CurrentController.ActiveSheet
    myrange = planilha_ativa.getCellRangeByName('A15:D18')

    my_matriz = (
                (10, 'Azul', 100.0, 'teste1'), 
                (11, 'Amarelo', 200.0, 'teste2'), 
                (12, 'Vermelho', 300.0, 'teste3'), 
                (12, 'Verde', 400.0, 'teste4')
                )

    myrange.setDataArray(my_matriz)


def escrever_celula(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    planilha_ativa = doc.CurrentController.ActiveSheet
    mycelula = planilha_ativa['A21']

    #Escrever Texto
    #myvalor = 'Hello'
    #mycelula.setString(myvalor)

    #Escrever Número
    myvalor = 45.00
    mycelula.setValue(int(myvalor))

    #Esvrever Fórmula, fórmula deve estar em inglês
    #myformula = '=SUM(5+10)'
    #mycelula.setFormula(myformula)

obs: Quando vai trabalhar no calc, o conteúdo das planilhas é uma matriz multidimensional - é uma tupla de tuplas. Onde cada linha do CALC é uma tupla separada e cada item dessa tupla se refere a uma coluna dessa linha do CALC

1 curtida

Tenho uma playlist com alguns truques sobre Libreoffice:

2 curtidas

Acho que faltou eu mostrar como executa a macro em python. Fiz dois videos mostrando duas possibilidades, não tenho microfone então vai sem voz mesmo.

No primeiro video executo a macro diretamente pelo organizador de macros:

  • Existe um problema, só as macros sem argumentos podem ser executadas.
  • Ao executar a macro ‘abrir_documentos()’ exibe erro pois não é possível passar o argumento ‘caminho_arquivo’, é passado apenas via código.
  • Ao executar a macro ‘mostrar_infos()’ ocorre tudo bem pois ela não tem argumentos mas mesmo assim é obrigatorio informar ‘*args’ → ‘def mostrar_infos(*args)’ ao escrever macro.

No segundo video executo a macro através de um botão:

  • No organizador de macros pyhton (shift+alt+F11) eu edito o arquivo de macros e adiciono uma função nova → ‘def manipular_msg(*args)’
  • Salvo o arquivo e fecho o Vs code.
  • Mudo o documento para o modo de edição ativando o botão ‘Alternar modo de edição’
  • Insiro um botão novo
  • Nas propriedades do botão, adiciono a macro ‘manipular_msg’ no evento ‘botão do mouse liberado’
  • Desativo o modo de edição
  • Salvo o documento
  • clico no botão mas exibe o erro, pois o arquivo precisa ser aberto novamente para entender que a macro ‘manipular_msg’ existe.
  • Fecho e reabro o arquivo
  • Clico no botão e agora sim a macro funciona normalmente.

Arquivo de exemplo modificado

2 curtidas

Obrigado por todo conteúdo amigo. Vou olhar tudo. Muito obrigado

Não conhecia o canal, vou olhar os dois, vi que tem muito conteúdo vai me ajudar demais. Muito obrigado

1 curtida

Muito obrigado, vou assistir os vídeos. Apesar de trabalhar com contabilidade, hoje em dia há muitos softwares que não precisamos usar Excel como antes, acho que nunca foi uma necessidade e sim mais marketing dessa ferramenta, não digo que é uma ferramenta ruim, mas não quero manter o Windows 10 em dual boot com o Pop OS só por causa do Excel.

Obrigado meu amigo pelas dicas, vou assistir tudo.

1 curtida