29.12
2010

Esse é um daqueles posts do tipo “vou precisar disso de novo, então é melhor deixar registrado”. Cenário:

Tenho uma planilha do BrOffice/OpenOffice Calc com dados de usuários e preciso migrá-los para um SGBD. A ideia é copiar e colar as células num arquivo texto e escrever um script Python para ler esses dados e gerar um script SQL com os inserts. O script lê cada linha e guarda em arrays os tokens (ao colar, as células de uma linha vêm separadas por TABs), faz algumas operações e gera os inserts. O problema é que algumas dessas células estão em branco e isso atrapalha o script, fazendo com que alguns arrays fiquem menores que os outros.

Após pesquisar um pouco, conseguir fazer uma fórmula que preenche as células vazias com um conteúdo que pode ser interpretado no script.

Criei uma segunda planilha no mesmo arquivo (Sheet2, a original é a Sheet1) e colei a fórmula abaixo na célula equivalente à primeira planilha (os dados começam em Sheet1.A2, então a fórmula foi colada em Sheet2.A2). Observação: ao invés de pressionar Enter para finalizar a entrada da fórmula, deve-se usar Ctrl Shift Enter, por ser uma “array formula”. Também é preciso estar marcada a opção Ferramentas > Conteúdo da Célula > Autocalcular.

=SE(ÉCÉL.VAZIA(Sheet1.A2:E597);"null";Sheet1.A2:E597)

Os dados vão de A2 a E597. Para cada célula da primeira planilha, se o valor estiver em branco, será escrito (na segunda planilha) null. Caso contrário, será escrito o valor original. Por fim, apaguei a planilha Sheet1.

Algumas observações:

  • É obrigatório ter o else na condição, senão é escrito FALSE.
  • Aquele segundo “Sheet1.A2:E597″ é horrível. Provavelmente existe um “self” ou “this” para referenciar a própria célula, mas não encontrei.
  • Seria melhor alterar o próprio dado ao invés de precisar criar outra planilha, mas talvez isso só seja possível com macros.

1 comentário

Faça seu comentário
  1. [...] que preenchesse automaticamente células de uma planilha do BrOffice Calc. Encontrei essa dica no blog do Otto Teixeira e gostaria de deixar registrado aqui caso alguém [...]