Rudy_jr 47 Denunciar post Postado Maio 29, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 29, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Rudy_jr 47 Denunciar post Postado Junho 6, 2013 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... Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Junho 6, 2013 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! Compartilhar este post Link para o post Compartilhar em outros sites
Almir Bispo 2 Denunciar post Postado Julho 10, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites