Ir para conteúdo

POWERED BY:

Arquivado

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

rafa-martin

ler excel com phpexcel

Recommended Posts

estou lendo uma planilha (formato xlsx) usando phpexcel.

 

as informações que nela existem, preciso inserir em duas tabelas distintas.

 

formata da minha planilha:

 

descricao nome valor

produto1 produto teste 10,00

produto2 produto teste1 20,00

 

eu preciso inserir a descrição em uma tabela e depois pegar o id da descrição e inserir em outra tabela junto com o nome e valor.

 

eu fiz meu for como coluna e linha. porque dessa forma eu teria as informações no jeito para eu poder inserir. seria assim:

 

for (lê coluna)

{

for (lê linha)

{

 

}

}

 

coluna 0 - linha 1: descricao

coluna 0 - linha 2: produto 1

coluna 0 - linha 3: produto 2

 

coluna 1 - linha 1: nome

coluna 1 - linha 2: produto teste

coluna 1 - linha 3: produto teste1

 

coluna 2 - linha 1: valor

coluna 2 - linha 2: 10,00

coluna 2 - linha 3: 20,00

 

só que não está dando certo.

 

alguma outra solução?

 

 

pessoal alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Trabalhar com excel é bem embaçado, menos embaçado seria trabalhar

com .csv (Confederación Sudamericana de Voleibol)! O próprio Excel têm

uma forma de se exportar os dados para .csv, e geralmente os sistema SGBD

como o WorkBench, MySQLAdmin e etc... Conseguem importar .csv pro banco,

daí seria muito mais simples fazer o que quiser com os dados...

 

Se trata de mais de um documento?

 

http://pt.wikipedia.org/wiki/Comma-separated_values

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo sendo csv, ele ficará separado por porto e vírgula e cairia no mesmo problema q estou tendo hoje.

 

eu preciso ler o excel ou csv de uma forma que eu consiga fazer que descrevi acima.

 

eu teria q fazer um inser mais ou menos em arvore.

 

linha 1

insert na tabela1

insert na tabela2 com o id da tabela1 e com os outros valores

 

linha 2

insert na tabela1

insert na tabela2 com o id da tabela1 e com os outros valores

e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você já conseguiu trazer as informações pro PHP de uma forma que você consiga

trabalhar com elas? A dúvida está em como relacioná-las no banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso já consegui.

 

o problema agora é como inserir.

 

os valores da coluna descrição tenho que inserir numa tabela.

 

as colunas produto e valor tenho que inserir em outra tabela junto com o id da inserção da primeira tabela.

 

o problema é que seu fizer um if quando for linha 1 e coluna igual a descricao, vai me gerar os dois inserts da primeira tabela e os outros dois inserts vai gerar depois dos primeiros inserts.

 

tem que gerar o insert da descricao na primeira tabela e logo em seguida gerar o segundo insert com o id que gerou na primeira mais os valores das colunas produto e valor.

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então como eu disse lá na primeira resposta, eu salvaria tudo na forma como está no banco

para depois trabalhar essas informações da forma como eu gostaria, a lógica é simples

 

Você vai percorrer toda a tabela com os dados que você pegou do excel e vai inserindo

nas novas tabelas formalizadas que você vai criar... e a cada vez que você for criar um

registro na tabela A você vai fazer uma consulta na tabela B para ver se existe aquela

coluna em B, se sim você vai retornar a linha, se não você vai cadastrar uma nova linha

na tabela e em ambas as situações retornar o identificador para concluir o registro em A...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é melhor usar um foreach?

foreach ($this->ExcelReader->sheets[0]['cells'] as $this->key => $this->cell) {
   
   if ( $this->key === 1) {
   
	  //coluna
	
   } else {
		
	  //linha
   
   }

}

Pois o primeiro índice são as colunas, o restante linha.


E opte por .xsl padrao universal, menos dores de cabeça, ao contrario da .xslx

Compartilhar este post


Link para o post
Compartilhar em outros sites

o foreach eu já faço.

 

o problema é o seguinte: cada linha da planilha corresponde ao um produto.

 

quando começo a ler a coluna 1 e linha1 que é descrição eu tenho que fazer um insert na tabela 1. assim que eu inserir na tabela1, preciso pegar o id e inserir os valores das colunas nome e valor em outra tabela junto com o id da tabela 1. esse procedimento tem que corresponder a linha 1 da planilha.

 

tenho que fazer a mesma coisa para a linha 2, linha 3 , linha 4 e assim vai indo.

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pegar o ID guardar em uma variável e continuar outros inserts no loop

foreach ($this->ExcelReader->sheets[0]['cells'] as $this->key => $this->cell) {
   
   if ( $this->key === 1) {
   
	  //coluna
	
   } else {
		
	  $last_id = $conn->lastInsertId();

          insert2($last_id);  
          insert2($last_id);
                  insert3($last_id);

   }

http://www.w3schools.com/php/php_mysql_insert_lastid.asp

 

Nessa hora um pouco de conhecimento em OPP facilita a vida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa,

 

Também acho que você deveria converter o arquivo que deseja importar para CSV (pode ser convertido no proprio excel - salvar como e escolha o formato - CSV separado por virgula), O processo para importação é bem simples. Eu tenho esta rotina que desenvolvi para sistemas de clientes meus e funciona perfeitamente. Funciona da seguinte forma:

 

Primeiro: mandar ler o arquivo CSV com o seguinte comando:

 

$arq = fopen('local_onde_esta_arquivo/'.nome_arquivo,'r');// le o arquivo CSV

 

Segundo: montar um loop com while ou for, para você pegar os dados de cada linha e trabalhar com eles.

O que o PHP faz é montar um array contendo o conteudo de cada coluna de cada linha. Então no primeiro loop ele vai disponibilizar para você o conteudo de cada coluna da primeira linha, no segundo loop vai disponibilizar o conteudo de cada coluna da segunda linha e assim por diante,até o eof() final do arquivo CSV.

 

codigo para o loop: while(!feof($arq)){

if ($conteudo = fgets($arq)){//se extrair uma linha e não for false

$ll++; // $ll recebe mais 1 ==== enquanto o existir linha sera somada aqui - conta o numero de linas doarquivo
$linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
}
Depois que cada linha foi dividida em colunas pelo comando explode(),você consegue pegar cada valor de cada coluna e trabalhar com ele, através de referencia aos elementos de array().No caso aqui mostrado colocamos os elementos de cada linha no array chamado $linha,então o $linha[0],conterá o conteudo da primeira coluna da da primeira linha da planilha, o $linha[1] conterá a segunda coluna da primeira linha e assim sucessivamente. Quando no loop passares para a segunda linha o processo de repete até a última linha do arquivo CSV.

}

 

Estou colocando no meu blog: www.macetesweb.com,br, uma rotina de importação de dados de arquivo CSV onde podes fazer donwload, se quiseres.

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.