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

26 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.

  15. 0liveira disse:

    Olá, estou tentando apresentar uma tabela excel numa página php,
    mas não aparece nada.
    Meu código:

    dump();
    ?>

    Na página fica escrito:
    dump(); ?>
    Alguém poderia me indicar o erro?
    Obrigado

  16. Battisti disse:

    Posta seu código no github pragente dar uma olhada, assim sem mais informação fica dificil ajudar, pode ser taaaaanta coisa :)

  17. 0liveira disse:

    Eu postei o código, mas não apareceu no post.
    O código é o seguinte:

    include ‘excel_reader2.php’;
    $data = new Spreadsheet_Excel_Reader(“planilha.xls”);
    $data->dump();

    Os nomes dos arquivos estão corretos, no entanto não aparece
    a planilha do excel na minha página php.
    Alguma idéia?
    Obrigado

  18. Battisti disse:

    Pede ao PHP para ele exibir os erros, error_reporting(E_ALL) e posta ai o resultado!

  19. 0liveira disse:

    Olá, estou tentando colocar este código de erros, no entanto,
    aparece escrito “erro_reporting(E_ALL)” e não aparece o erro.
    Olha o código:

    include ‘excel_reader2.php’;
    $data = new Spreadsheet_Excel_Reader(“planilha.xls”);
    $data->dump();
    error_reporting(E_ALL);

    No entanto, na minha tela aparece:
    dump(); error_reporting(E_ALL); ?>

    Um detalhe muito estranho: eu já tentei colocar como comentário todo o
    código php, no entanto, na tela sempre fica o mesmo escrito $data->dump();
    Se eu coloco outro código em qualquer lugar, esse código aparece escrito
    seguido do $data->dump();. Alguma idéia?

    Obrigado.

  20. Paulo Rafael disse:

    Era justamente isso que eu estava procurando, funcionou perfeitamente, mas tive que arrumar algumas coisas no código porque estava dando erro, por exemplo trocar a função split pela explode.

  21. thiago disse:

    não consegui ver, oq será que stou fazendo de errado

  22. Battisti disse:

    Depende da versão do PHP que vc esta usando!

  23. Carlos disse:

    Boa tarde…

    Preciso de uma ajuda, e desde já agradeço!

    Depois que transformei a planilha em array, como faço para colocá-la em um banco de dados mysql?

    Obrigado e parabéns pelo site.

    Carlos

  24. Battisti disse:

    #carlos ai vc vai ter que estudar um pouco sobre PHP e integracao com mysql! nao vai ser uma resposta de um blog que vai resolver o teu problema!

  25. Grande Battisti!!!
    Um tempo atrás descobri esta classe e dei uma passada por cima…
    Desta vez fui atrás dela pela necessidade, achei ela aqui no teu site e realmente ela é MUITO BOA e o melhor de tudo; F U N C I O N A !! =P
    Abraço.

  26. Battisti disse:

    Zanette funciona sim e muito bem! aqui na Webgenium agente usa ela para que as empresa nos montem arquivos para importação!

    Muita gente nao sabe como gerar CSV ai até explicar da muito trabalho eu falo manda em XLS que agente se resolve por aqui!

Leave a Reply