Ir para conteúdo

POWERED BY:

Arquivado

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

Fernanda Francisco

Importação de XLSX via PHP

Recommended Posts

Oi pessoal!

 

Estou desenvolvendo meu TCC, o qual precisará ter a funcionalidade de importar dados de tabelas do Excel. Pesquisei várias formas de fazer isto e a que mostrarei aqui, pareceu ser a melhor maneira para mim. Porém estou tendo alguns problemas.

 

MtPmH.png

 

Como podem ver na imagem acima, na página de importação se tem a opção de escolher a quantidade de dados que serão importados e depois dizer quais são. Porém quando escolho os 13 campos da tabela, ocorre um problema e os dados não são gravados no banco. Caso eu escolha um número menor de campos, alguns dados vão parar no banco, porém não dá forma correta.

 

Aqui estão alguns códigos que usei nessa importação:

 

importar_arquivo.php

<?php
$titulo = $_POST['descartar_linha'];

$tabela = "<table width='100%' border='1' id='tabela_dados'><tr>";

	$x = 1;
	$campos = "";
	while(isset($_POST['campo_' . $x])) {
		$campos .= $_POST['campo_' . $x];
		$tabela .= "<td align='center' class='titulo_tabela'><b>" . $_POST["campo_" . $x] . "</b></td>";
		$x++;	
	}

	switch($_POST['tipo_arquivo']) {
		case 'xls':
			require_once 'leitores/Excel.read.php';

			$arquivo = pathinfo($_FILES['arquivo']['name']);
			$extensao = $arquivo['extension'];

			$nome_arquivo = 'importacao_' . time() . '.' . $extensao;

			if(move_uploaded_file($_FILES['arquivo']['tmp_name'], $nome_arquivo)) {

				$excel = new Spreadsheet_Excel_Reader();
				$excel->setOutputEncoding('CPa25a');
				$excel->read('importacao_' . time() . '.' . $extensao);

				$r = 1;
				if($titulo == 'true') {
					$r = 2;
				}

				while( $r <= $excel->sheets[0]['numRows']) {

					$y=1;
					$row="";

					$tabela .= "<tr>";

						while($y <= $excel->sheets[0]['numCols']) {

							$cell = isset($excel->sheets[0]['cells'][$r][$y]) ? $excel->sheets[0]['cells'][$r][$y] : '';

							$tabela .= "<td class='cor_nao'> " . utf8_encode($cell) . "</td>"; 

							$y++;

						}

					$tabela .= "</tr>";		
					$r++;
				}
			}

			break;	
		case 'xlsx':
			require_once 'leitores/XLSX.read.php';

			$arquivo = pathinfo($_FILES['arquivo']['name']);
			$extensao = $arquivo['extension'];

			$nome_arquivo = 'importacao_' . time() . '.' . $extensao;

			if(move_uploaded_file($_FILES['arquivo']['tmp_name'], $nome_arquivo)) {

				$xlsx = new SimpleXLSX('importacao_' . time() . '.' . $extensao);

				$linhas = 0;
				list($num_cols, $num_rows) = $xlsx->dimension();
				foreach( $xlsx->rows() as $r ) {

					if($titulo == 'true' && $linhas == 0) {
						$linhas++;
						continue;
					}

					$tabela .= "<tr>";

					for( $i=0; $i < $num_cols; $i++ ) { 
						$tabela .= "<td class='cor_nao'>" . $r[$i] . "</td>";
					}

					$tabela .= "</tr>";
				}
			}

			break;	
	}

$tabela .= "</table>";

unlink($nome_arquivo);
?>

 

confirma_importacao.php

<?php
include_once("conexao/conexao.php");

$cont_campos = $_POST['cont_colunas'];

$campos = array();

for($linhas_titulo = 0; $linhas_titulo < $cont_campos; $linhas_titulo++) {
	$campos[] = $_POST['colunas'][$linhas_titulo];
}

$importados = 0;
$cont_linha = 0;
$dados = array();
for($linhas_dados = $linhas_titulo; $linhas_dados < count($_POST['colunas']); $linhas_dados++) {

	if($campos[$cont_linha] == 'VL_UNITARIO_PRODUTO') {
		$dados[] = @number_format($_POST['colunas'][$linhas_dados], 2, '.', '');

	} else {
		$dados[] = str_replace("'", "", $_POST['colunas'][$linhas_dados]);	
	}

	$cont_linha++;

	if($cont_linha == $cont_campos) {
		$cont_linha = 0;	
		$sql = @mysql_query("INSERT INTO produto (" . implode(', ', $campos) . ") VALUES ('" . implode("', '", $dados) . "')");

		if($sql) {
			$importados++;
		}

		$dados = array();
	}
}

echo "Importação efetuada com sucesso. Foram importados $importados produtos.";

?>

 

editar_campos.php

<?php
for($x = 1; $x <= $_POST['quantidade']; $x++) {
	echo "
	<p>
		Campo $x: <select name='campo_$x' id='campo_'>
			<option value='CD_PRODUTO'>CD_PRODUTO</option>
			<option value='CD_FORNECEDOR'>CD_FORNECEDOR</option>
			<option value='CD_SETOR_PRODUTO'>CD_SETOR_PRODUTO</option>
			<option value='CD_LOCALIZACAO'>CD_LOCALIZACAO</option>
			<option value='NM_PRODUTO'>NM_PRODUTO</option>
			<option value='NM_DESCRICAO_PRODUTO'>NM_DESCRICAO_PRODUTO</option>
			<option value='QT_PRODUTO_ESTOQU'>QT_PRODUTO_ESTOQUE</option>
			<option value='VL_UNITARIO_PRODUTO'>VL_UNITARIO_PRODUTO</option>
			<option value='NM_MARCA_PRODUTO'>NM_MARCA_PRODUTO</option>
			<option value='QT_MINIMA_ESTOQUE'>QT_MINIMA_ESTOQUE</option>>
			<option value='DT_VALIDADE'>DT_VALIDADE</option>
			<option value='DT_AQUISICAO'>DT_AQUISICAO</option>
			<option value='NM_UNIDADE'>NM_UNIDADE</option>
		</select>
	</p>";	
}
?>

 

Para facilitar, aqui estão todos os arquivos que utilizei, incluindo os .js e banco.

 

Tentei arrumar, mas não estou conseguindo achar o erro. Ao enviar a tabela, a aplicação lê corretamente os dados enviados, porém o mais importante que é gravar no banco, não está funcionando corretamente.

 

Agradeço desde já a quem puder me ajudar! (:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Fernanda, a primeira coisa que recomendo neste caso e remover o @ do mysql_query para ver o erro e adicionar um or die(mysql_error()) para ver pq nao esta inserindo e temtar desbugar seu codigo.

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.