sexta-feira, 30 de junho de 2017

Macro Fácil

Inciando um pequeno banco de dados no Calc. Primeiro dizer que Banco de dados é maneira de falar, pois banco de dados verdadeiramente não se faz numa planilha. Mas com minhas constantes frustações no Base por causa do Java, ou seria minha frustração do Java que não funciona direito no Base? Enfim, sem divagações e direto ao ponto. Uma matéria minha anterior, em meu blog, versava sobre essa ideia que volta e meia me “pegava”, usar o Calc como formulário e para guardar dados, - Cara ele passa de um milhão de linhas para ser guardadas…. Veja a matéria em: http://betobyte.blogspot.com.br/2014/02/a-necessidade-e-mae-da-invencao-quem.html

Depois disso, o pessoal do Linux dizia que o Calc não abaixava a linha durante a macro automática. Resolvi pedir ajuda no https://ask.libreoffice.org/pt-br/questions/ aqui neste site tem muitos “feras” em Libreoffice. Lá eu lancei uma pergunta: https://ask.libreoffice.org/pt-br/question/58248/definir-o-endereco-de-colagem-na-macro/ a qual seria como eu colo um conteúdo numa dada célula? Olha só o que eu queria: queria escrever na Planilha2 usando sempre umas três linhas (para começar), no sentido vertical e a um comando de ok, recortá-las para a Planilha1 colando no sentido horizontal. Nessa “malandragem” eu teria a Planilha2 como Formulário e a Planilha1 como Banco de Dados, ou o a Planilha “BD” como mais tarde resolvi chamar em meu arquivo (mais evoluído) CRUD em Calc.

Em meu socorro veio o Colega Grafeno, aliás, uma das grandes coisas dessa comunidade são as grandes pessoas que não tem “pudores” em compartilhar seus conhecimentos. Temos uma comunidade muito boa e com espaço para muito mais pessoas de boa vontade. Depois de tantos preâmbulos vamos direto ao ponto a macro que o Grafeno produziu para mim e para o mundo todo :) acessar livremente.

Primeiro passo é ir no Calc e criar duas planilhas, Planilha1 e Planilha2. Depois, fazer uma macro qualquer de maneira automática:




digite algo em uma célula tire o cursor para outra célula e clique em “parar Gravação”:




irá aparecer esta janela:
Localize o arquivo (por enquanto com o nome) Sem título, clique nele e salve-a no arquivo mesmo, assim ele estrá sempre no arquivo quando copiá-lo por algum motivo. Normalmente, a primeira macro tem o nome de main e fica dentro do modulo1, mas para frente você irá descobrir melhor como funciona isto.

Agora vá em Menu, “Ferramentas, Macro, editar macros e lá clica no ícone de seu arquivo e à direita aparecerão as macros, depois é só acrescentar esta macro (copie e cole o conteúdo disponível no quadro abaixo), logo abaixo do “end sub” da recém-criada macro.

















Selecione a Macro Main e clique em Editar. Copie e cole o conteúdo abaixo do última linha “end sub”



Macro autoria: Grafeno


Sub TransferirDados
Dim oDoc As Object, oPlanOrigem As Object, oPlanDestino As Object
Dim sEndereco As String, sCol As String, sLin As String
Dim iLin As Integer

    'Obter as planilhas de origem e de destino
    oDoc = ThisComponent
    oPlanOrigem = oDoc.Sheets.getByName( "Planilha2" )
    oPlanDestino = oDoc.Sheets.getByName( "Planilha1" )

    ' Pegar o Endereço em B1 na planilha de origem
    sEndereco = oPlanOrigem.getCellRangeByName( "B1" ).String
    ' Pegar a coluna e a linha definidas no endereço 
    sCol = Left( sEndereco,1 )
    sLin = Mid( sEndereco,2,Len( sEndereco ) )


    'Verificar se é um endereço válido
    If  Ucase( sCol ) <> "A" Or Not IsNumeric( sLin ) Then 
        MsgBox "Por favor, forneça um endereço correto.", 16, "Erro"
        Exit Sub
    End If

    ' Transferir os valores
    iLin = cInt( sLin ) - 1 ' Menos 1 porque a posição das células começa com 0.
    oPlanDestino.getCellByPosition( 0,iLin ).String = Ucase(sEndereco)
    oPlanDestino.getCellByPosition( 1,iLin ).String = oPlanOrigem.getCellRangeByName( "B2" ).String
    oPlanDestino.getCellByPosition( 2,iLin ).Value = oPlanOrigem.getCellRangeByName( "B3" ).Value

    ' Limpar o conteúdo do intervalo B1:B3
    ' Argumentos do método clearContents:
    '  -> 1 para apagar valores
    '  -> 4 para apagar strings (texto)
    '  --> 1 + 4 = 5 apaga valores + string
    oPlanOrigem.getCellRangeByName( "B1:B3" ).clearContents( 5 )
End Sub



Sua macro está pronta e tudo que você digitar na células B1 a B3 (sentido da coluna) serão trasportadas para a Planilha1 no sentido horizontal (de linha).


Mas será que é qualquer coisa mesmo? Não, lá existirão células que só aceitarão números e outras só aceitarão strings (letras). No próximo vídeo e artigo analisaremos a anatomia dessa macro que tão gentilmente o Grafeno do ASK do Libreoffice nos disponibilizou. Veja mais em meu blog: http://betobyte.blogspot.com.br.

Baixe o arquivo de teste.
Assista ao meu vídeo:
Outros vídeos:

sexta-feira, 30 de dezembro de 2016

BANCO DE DADOS com foto ou imagem direto no Calc - CRUD NO CALC

CRUD (em Inglês = Create, Read, Update e Delete), significa Criar, ler, modificar e apagar dados de um banco de dados. Aqui, a ideia foi simular um banco de dados usando uma planilha do Calc em conjunto a outras planilhas, que funcionam como formulários: uma para inserir dados, outra para visualizar os dados inseridos, inclusive figuras ou fotos, uma quarta para modificar os dados, como se fossem formulários do BASE.

Foram usados vários recursos, como macros (aqui adaptando macros do colega Grafeno do ASK do Libreoffice), objetos de formulários e um pouco de criatividade.

Cheguei a pensar em fazer um tutorial para ensinar a modificá-lo, quem sabe mais a frente. Um usuário médio logo consegue "pegar" como adaptá-lo, caso considere útil.

É um documento modificável e bom para quem quer ver as possibilidades do Calc (brincar um pouco), nesse quesito de armazenar registros com imagem sem usar tanta memória, já que as imagens ficam numa pasta à parte.

Vou publicar os arquivos ainda, para quem quiser fazer o download e deixarei aqui o link para baixá-los:

são dois. Este para cadastro de pessoas , no caso usar este aconselho a colocar logo uma imagem com o nome sem_foto.jpg dentro da pasta que for usar para guardar as fotos/imagens para que o libreoffice não feche (aqui temos um pequeno bugzinho) pois se uma foto for "chamada" e não existir, dá um erro no Libreoffice e ele fecha sem dó e fica naquela coisa de ir recuperar arquivo, pois fechou sem salvar.... O outro arquivo é para financeiro com recibos (este último sem necessidade de fotos embora possa, Vamos que alguém queira fotografar as notas fiscais...
para recibos e contábil,

Caso vc ainda não tenha seu dropbox pode pegar este convite meu https://db.tt/ik9anJ5J, isto me ajuda a ter mais espaço por lá.

Os vídeos não são nada profissionais, mas para que quiser dar uma olhadinha neste para Recibos:

 

Este para pessoas e com foto é basicamente omesmo arquivo com algumas modificações:

 

quinta-feira, 12 de maio de 2016

FORA TEMER!!

FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER!

FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER!

FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER!

FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER! FORA TEMER!

domingo, 1 de maio de 2016

FORA CUNHA!

Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha!

Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha!

 Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha!

 Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha!

 Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha! Fora Cunha!

Obs: autorizado a copiar o post

sexta-feira, 15 de abril de 2016

Listas suspensas em cascatas com validação

Ou... Tem que ter categoria 2!

É isso, a gente sempre vai aprendendo na medida que ensina.
Fui brincar com este negócio de categorizar ... No artigo tem que ter categoria! Ensinei do jeito mais difícil… isto ajuda a brincar um pouco com a criatividade e recursos do Libreoffice como a função PROCV(). Mas, vamos simplificar mais esse trabalho. Acredita que dá de fazer de maneira mais simples ainda que no Excel?


Vejamos: primeiro reservamos uma planilha para colocar as categorias que podem se tornar em subcategorias. Aqui cada coluna é um espaço de categoria. Na coluna A iniciamos com Brasil e nas linhas abaixo a lista dos Estados do Brasil, aqui coloquei três para ser mais rápido. Dentro dos Estados três cidades.

Depois disso: Nomeamos cada coluna dessas para o libreoffice saber das delimitações desses dados:

Clicamos na cabeça da coluna e em dados, definir intervalo nomeamos o intervalo como “Brasil”.


Depois na planilha onde vai estar a seleção de categorias e subcategorias, vamos aplicar a Validação clicando em Dados e “validação” e digita o nome do espaço nomeado nesse caso “Brasil”.


Ato seguido selecione a outra célula (onde estarão as subcategorias) e repita a mesma operação, dessa vez digite: a Função INDIRETO(A1) e como pode ver o endereço da célula referência (A1).
Pronto!

E como sempre um arquivo de exemplo, E um vídeo para ficar mais fácil.

quinta-feira, 14 de abril de 2016

Tem que ter categoria!

Para quem já acompanhou umas dicas anteriores, onde escrevi como usar o Calc como um banco de dados, está no meu blog pode conferir neste link: http://betobyte.blogspot.com.br/2014/02/a-necessidade-e-mae-da-invencao-quem.html . Agora vai poder incrementar e dar sequência vendo: como colocar categorias e suas respectivas subcategorias em um formulário, e para aqueles que querem se aprofundar nesse quesito, basta conferir também no Ask do libreoffice: https://ask.libreoffice.org/pt-br/question/58248/definir-o-endereco-de-colagem-na-macro/ . Vai ajudar a dar mais precisão no quesito da macro para transportar os dados de uma planilha para outra pois caso resolva fazer um banco de dados, não importa o tamanho, sempre é uma tarefa meticulosa.

Voltando ao nosso assunto: quando resolvemos categorizar algo, nos damos contas das inúmeras categorias a que pertencem nossos objetos ou itens… imagina então categorizar coisas de um supermercado, por exemplo. Cada categoria terá inúmeras subcategorias com isso rapidamente passamos de cem ou de mil… O que fazer para agilizar este processo sem ter que decorar números e nomes ou ainda percorrer uma lista sem fim para selecionar um item?

Vou dar um pontapé inicial e o resto fica por conta da criatividade de cada um. Em programação existem diversas maneiras de fazer e nenhuma é errada apenas mais ou menos dispendiosa de tempo e memória. No final das contas, a melhor maneira de fazer é aquela que sabemos, não é mesmo?

Vamos imaginar a seguinte situação temos 11 categorias e cada uma dessas 11 categorias tem 50 subcategorias, ou seja 550 itens de uma lista para clicar e escolher. Como cadastrar num formulário sem que isso fique muito complexo? E se aumentarmos o número de categorias? Confesso que eu tinha feito de um jeito que não foi muito prático a primeira vez, usando a função SE(), mas a linha de código ficava muito extensa e fácil de se perder. Mas resolvi utilizando PROCV() e um pouquinho de criatividade.

Vamos aproveitar e deixar previsto a possibilidade de chegarmos a 50 categorias por 50 subcategorias, ou seja, uma um total de 2500 subcategorias.


Vamos imaginar que na planilha2 tenhamos nosso formulário mais ou menos assim como esta figura abaixo:


comentário: *Como ficou fácil recortar figura no Libreoffice versão 5, me dei conta ao fazer este tutorial*.

Mas e agora, como puxar as subcategorias para que fiquem assim?


Na planilha1 vamos deixar a primeira coluna (A) para usarmos a função =PROCV()
Na coluna (B) Vamos preencher com as categorias e em linha, no lado direito de cada categoria, vamos colocando as subcategorias até o limite de 50.































Agora, voltamos a Planilha2 e vamos na célula (B5) onde serão selecionadas as categorias, clicamos nela para ficar selecionada e no menu escolhemos “validação”:



E no intem “permitir” escolhemos “Intervalo de Células” e em “Origem” inserimos o seguinte código: $Planilha1.$B$1:$B$50 e clicamos em “OK”









Agora vamos fazer que as opções de subcategoria apareçam de acordo com categoria escolhida. Para isso selecionamos a célula (B6) e repetimos a validação só que dessa vez colocamos o seguinte código: $Planilha1.$A$1:$A$50

Nada demais né? Mas como esse intervalo de células vai capturar as subcategorias? Ai é que entra a Função PROCV().

Entendendo o funcionamento da Função: Na célula A1 da Planilha1 inserimos a Função PROCV(), nela fazemos referência a célula do formulário (Planilha2, célula B5) onde será selecionada a Categoria (o critério da função), ou Seja: Planilha2.B5. Depois do critério da função (que separamos por “;”) devemos informar a Matriz, ou seja: de onde até onde se deve buscar estes dados. No caso de B1 a AZ da atual planilha. E em seguida informamos de qual coluna queremos os dados a ser mostrado e o zero no final é a ordem de classificação. Os cifrões em frente ao código é para facilitar a cópia por arrasto que não deixará mudar os valores.

  
Uma vez feita a primeira fórmula, copiamos a mesma arrastando para baixo atá a célula (A50), depois é só ir mudando na fórmula copiada o número da coluna que queremos capturar, para que ela possa transpor o dado. Baixe o arquivo aqui e estude-o, logo vai entender o processo. Aqui vídeo ainda explicando novamente este processo.


Matéria em destaque pelo editor.

Gere formulários PySimpleGui rapidamente para planilhas Excel, Libreoffice Calc e outros

CRUD  em BD e MENU - Gere programas completos rapidamente Vou te apresentar uma forma incrível de gerar aplicativos python em minutos a part...