Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como faço para ler um arquivo excel,
sem ter que utilizar uma classe como PHPExcel por exemplo
ou seja como abrir e ler o excel utilizando o PHP tentei procurar no google mas em todo canto utiliza esta classe,
porém como estou usando um framework não consigo integrar essa classe nele, então estou querendo uma opção "extra" para este problema ou seja como ler o excel e após coletar estes dados grave no DB
ou seja consigo fazer tudo o que quero, menos ler o arquivo xls, alguém tem alguma dica, como fazer? sugestão?
Inclusive procurei no forum alguma dica, ou tópico relacionado, mas o que encontrei não solucionou meu problema.
Obrigado.
Fala galera, consegui ler o excel, tranquilo
porém agora vem o "GRANDE" problema
o excel que o cliente deseja importar tem em média 10 mil linhas com umas 15 colunas
e toda a vez que tento fazer a importação acontece o erro
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 105 bytes) in PHPExcel/Worksheet.php on line 1136
já tentei aumentar no php.ini o maximo de memoria para 512M por exemplo mas não adiantou nada, tentei por ini_set direto no php e no htaccess e NADA.
O problema é que se por 1024M por exemplo a hospedagem é compartilhada, e dúvido muito que um servidor aceite este "tanto" de memória para um site saca? (ah e não testei com esta quantidade de memoria)
A importação vai acontecer apenas 1 vez por semana...
como posso arrumar isso, melhorar a leitura ou como fazer? Sugestões? Preciso resolver este job o quanto antes mas não saio deste ponto...
Ou se alguém souber como ler um excel com este tanto de registros, seja qual for o método em PHP ficarei muito agradecido, já estou meio que desesperado por não conseguir...
O arquivo é XLS ou XLSX?
Se for um XLSX, é ligeiramente mais fácil, porém, dá um pouco mais de trabalho no inicio.
Isto porque o XLSX é um arquivo ZIP que tem um monte de arquivos XML. Pegue um arquivo XLSX e renomeie para ZIP e veja seu conteúdo.
Abaixo um script simples para poder ler o conteúdo.
É extremamente mais rápido que a PHPExcel, mas também é infinitamente mais simples. É só para ler os dados mesmo.
<?php
header('Content-Type: text/plain');
$file = 'teste.xlsx';
$zip = new ZipArchive();
$zip->open($file);
$content = $zip->getFromName('xl/workbook.xml');
$xml = new DOMDocument();
$xml->loadXML($content);
$sheets = $xml->getElementsByTagName('sheet');
$sharedStrings = new DOMDocument();
$sharedStrings->loadXML( $zip->getFromName('xl/sharedStrings.xml') );
foreach($sheets as $sheet){
echo $sheet->getAttribute('name'), '#', $sheet->getAttribute('sheetId'), PHP_EOL;
$sheetContent = $zip->getFromName('xl/worksheets/sheet'.$sheet->getAttribute('sheetId').'.xml');
$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->loadXML($sheetContent);
// dimensoes da planilha
$parts = explode(':', $xml->getElementsByTagName('dimension')->item(0)->getAttribute('ref'));
if(count($parts) == 1){
$parts[] = $parts[0];
}
list($minCell, $maxCell) = $parts;
printf('Minimo: %s - Maximo: %s %s', $minCell, $maxCell, PHP_EOL);
$data = $xml->getElementsByTagName('sheetData')->item(0);
if($data->childNodes->length == 0){
echo 'Planilha sem dados', PHP_EOL;
} else {
$rows = $data->getElementsByTagName('row');
foreach($rows as $row){
$columns = $row->getElementsByTagName('c');
foreach($columns as $column){
$ref = $column->getAttribute('r');
if($column->getAttribute('t') == 's'){
$index = $column->getElementsByTagName('v')->item(0)->nodeValue;
$value = $sharedStrings->getElementsByTagName('si')
->item($index)
->getElementsByTagName('t')
->item(0)
->nodeValue;
} else {
$value = $column->getElementsByTagName('v')->item(0)->nodeValue;
}
preg_match('@([A-Z]+)(\d+)@', $ref, $match);
$columnNumber = ord($match[1]) - 64;
$lineNumber = $match[2];
printf('Celula: %s - Valor: %s - Coluna: %d - Linha: %d %s', $ref, $value, $columnNumber, $lineNumber, PHP_EOL);
}
}
}
echo str_repeat('-',20), PHP_EOL;
}
@braços e fique com Deus!
Porque não usa o CSV ao invés do XLS ?Depois é só registrar o csv para abrir com o Excel e ele representará a planilha no proprio XLS.
Lógico que existem Framework mais especializados em CSV do que PHP's:
http://adltecnologia.blogspot.com.br/p/blog-page.html
Crie um banco de dados totalmente em CSV com aplicação MVC.
http://bytes.com/topic/php/answers/9693-can-php-read-xls-files-directly
de uma olhada no post #2, lembre q extesão COM deve estar ativa no php.ini.