Battisti – Blog

Tecnologia, Web e um pouco de cultura inútil

battisti On junho - 8 - 2009

O Problema

Um de nossos clientes precisava coletar dados de diversas empresas, estes dados estavam todos em planilhas do excel e não tinha como pedir para estas empresas exportarem para cvs ou algo do tipo devido a diversos problemas que não vem ao caso, sendo assim a minha única alternativa era extrair os dados de dentro dos arquivos do excel através do PHP.

A Solução

Dando uma garimpada na NET acabei “trombando” com este cara PHP Excel Reader, o projeto era muito bom mas estava meio parado e com uma porção de bug, então um pessoal criou um fork deste projeto e coloco no code.google.

O código funciona muito bem e abaixo apresentarei alguns exemplo de como utilizar o PHP Excel Reader.

Exibindo Uma Planilha

Caso seu desejo seja apenas apresentar o conteúdo de um arquivo excel no navegador então faça o seguinte:

$data = new Spreadsheet_Excel_Reader("test.xls");
$data->dump();

Convertendo uma Planilha em Array

Não existe tal função na ferramenta, sendo assim eu fiz a implementação desta funcionalidade

$data = new Spreadsheet_Excel_Reader("test.xls")
$totalLinhas = $data->rowcount();
$totalColunas= $data->colcount();

for($i = 1; $i <= $totalLinhas; $i++){
	for($j = 1; $j <= $totalColunas; $j++){
		$a[$i][$j] = $data->val($i,$j);
	}
}
return $a;

Conclusão

Com o PHP Excel Reader ficou bem fácil de trabalhar com arquivos do excel no php. Uma coisa que pude notar é que existem diferenças de comportamento durante a leitura de arquivos xls feitos no OpenOffice e nos feitos no Excel da Microsoft, isso acontece principalmente devido a formatação das células em datas moedas etc.. o que estou fazendo é deixar todas as colunas no formato String mesmo

Categories: Web

14 Responses

  1. Anônimo disse:

    Mtu bacana esti kodigu hein………… soh naum sei u ke eh akela linha “$this->_data->val($i,$j);” ??!?!

    Podi me explicar ?

  2. battisti disse:

    esse $this->_data->val($i,$j); na verdade tem que ser $data->val($i,$j); ai vai dar certo

  3. Anônimo disse:

    vlw meu migu Bbattisti…vc eh 1 kara legau…… 1 pessoa ke ajuda as pessoa……

  4. Anônimo disse:

    QdU PREcIsAH di aLGuMah AjudAH eH Soh falaH TAH??!?! ehhehe

  5. shogun disse:

    Como instalo a classe, tipo tiro do zip e coloco onde? tentei mas ele dá erro ao chamar a classe.

  6. battisti disse:

    você precisa dar um include na claase antes de usa-la

  7. Amaury disse:

    Nao funciona… tentei somete exibir a planilha e deu a seguinte mensagem:
    Call to undefined method Spreadsheet_Excel_Reader::dump() in C:\wamp\www\hidrico\form_monitoramento.php

  8. battisti disse:

    provavelmente faltou algum include! ou alguma configuração do XAMPP ele é meio embasado! Manda uma parte do teu source pragente dar uma olhada

  9. leonardo disse:

    Está dizendo que meu arquivo é ilegível. Pode me ajudar ?

  10. Battisti disse:

    Da uma conferida nas permissões do teu arquivo, usa windows ou linux?

  11. Enfim, encontrei a solução :D
    Muito obrigado!
    Abraços

  12. Elmo Teixeira disse:

    Meu caro,

    A ferramenta funciona maravilhosamente bem. Só tenho uma dúvida que tá me deixando maluco. Como exibir células específicas de uma tabela?

    ex.:
    imaginemos a tabela exemplo.xls, ela tem 3 planilhas, em cada uma tenho informações alocadas em diferentes campos (ex.: célula a1= josé, célula b4=homem, celula d5=magro, etc.).
    Digamos que eu precise apenas do conteúdo das célula a1 e d5 da primeira planilha (“josé” e “magro”) e do conteúdo das células b4 e d5 da segunda planilha (“fulano” e “qualquer coisa”). Como eu faço essa bendita coisa? Tô me matando aqui e nada. Você pode de dar uma mão nisso?

    Agradeço desde já.

    Elmo

  13. Battisti disse:

    Elmo na documentação

    http://code.google.com/p/php-excel-reader/wiki/Documentation

    Access data on a different sheet:

    $data->val($row,$col,$sheet_index)

    Com isso deve resolver o seu problema

  14. Elmo Teixeira disse:

    Opa! Resolvido. Era exatamente isso.

    Abração, cara. Valeu pela ajuda.

Leave a Reply