Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rudy_jr

Ler Excel

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.