Você já teve a necessidade de importar informações de um ficheiro elaborado em “.XLS” para um banco de dados MySQL?
Se você já fez isso, certamente sabe que pode ser realizado através do phpMyadmin facilmente, correto?
Existem também alguns softwares que fazem isso de forma automática, mas o ideal é criarmos uma solução que possa nos atender!
Como de costume, estaremos elaborando a matéria e disponibilizando ao final o conteúdo para verificação.
Importar Através Do phpMyadmin
Como falamos acima, esta é a maneira mais prática de se converter um ficheiro feito no Excel (“.xls”) para o MySQL.
Para efetuar este procedimento, é só seguir os passos a seguir:
- Abra o Microsoft Excel e gravar o arquivo (que está em “.XLS”) como “.CSV”.
- Crie a tabela da base de dados usando o phpMyADMIN ou outro programa de sua escolha.
- Depois de ter criado a tabela, clique no link da tabela e aparecerá um novo link que diz “Inserir arquivo texto na tabela”.
- Vá ao link, escolha o ficheiro “.CSV” que você criou, configure as opções e importe os dados para a tabela.
- Para finalizar, basta fazer um “dump” da tabela, com estrutura e dados, para um ficheiro.
Prático, não?
Bem… se você achou complicado e quer facilitar seus trabalhos, preparamos uma solução mais simples!
Só lembrando antes de darmos início: A solução a seguir funcionará perfeitamente em ambiente Windows.
No Linux ele dá erro… Eu vasculhei a Internet a procuraa de uma solução que importe o XLS para CSV (em Linux), mas não vi nada que funcionasse.
Se você tiver idéia e quiser contribuir, é só me informar.
Criar As Tabelas Na Base de Dados
Antes de partirmos para a programação, vamos criar uma tabelinha simples, só para rodarmos a solução que estamos a criar.
Para isso, pegue o conteúdo do ficheiro script-sql.txt (disponível em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.
Em nossas matérias utilizamos como padrão o MySQLFront ou o PHPMyAdmin. Caso tu também esteja utilizando outra solução é só colar o conteúdo no SQL Editor (conforme código abaixo).
----- CRIA A TABELA CARROS -----
CREATE TABLE `tbl_carros` (
`id_carro` int(11) NOT NULL AUTO_INCREMENT,
`modelo` text,
PRIMARY KEY (`id_carro`)
);
Após criar a tabela acima, você poderá configurar o script de conexão à base de dados.
Configurar O Script De Conexão
Para efetuar a configuração devida, acesse o script “ConectaBanco.class.php” e siga o exemplo a seguir:
Conectar();
}
function Conectar(){
$this -> link = mysql_connect($this -> host, $this ->user, $this ->pass);
if (!$this ->link){
die ("Erro ao conectar.");
}elseif (!mysql_select_db($this ->base, $this ->link)){
die ("Erro ao selecionar banco.");
} // Fecha }elseif (!mysql_select_db($this ->base, $this ->link)){
} // Fecha function Conectar(){
// Fecha class ConectaBanco{
?>
Feita as configurações devidas, vamos analisar o ficheiro “index.php”.
Ficheiro index.php – Para Ambiente Windows
Este é o ficheiro principal que terá por finalidade importar suas informações ao MySQL.
Até para facilitar sua utiização, dividimos o ficheiro em 3 partes:
1 – Esta parte do código seleciona o ficheiro em “XLS” no computador e efetua seu envio ao diretório onde estão os ficheiros (conforme imagem e código a seguir).
2 – Recebe o ficheiro em XLS e faz tratamento (conforme código a seguir).
$uploaded = $_FILES['arquivo'];
function trocar_acentos ($uploaded){
$uploaded = str_replace(' ','_',$uploaded);
$uploaded = str_replace('á','a',$uploaded);
$uploaded = str_replace('Á','a',$uploaded);
$uploaded = str_replace('à','a',$uploaded);
$uploaded = str_replace('À','a',$uploaded);
$uploaded = str_replace('é','e',$uploaded);
$uploaded = str_replace('É','e',$uploaded);
$uploaded = str_replace('í','i',$uploaded);
$uploaded = str_replace('Í','i',$uploaded);
$uploaded = str_replace('ó','o',$uploaded);
$uploaded = str_replace('Ó','o',$uploaded);
$uploaded = str_replace('ú','u',$uploaded);
$uploaded = str_replace('Ú','u',$uploaded);
$uploaded = str_replace('(','',$uploaded);
$uploaded = str_replace(')','',$uploaded);
$uploaded = str_replace('ç','c',$uploaded);
$uploaded = str_replace('Ç','c',$uploaded);
$uploaded = strtolower($uploaded);
return $uploaded;
}
$uploaded = trocar_acentos ($_FILES['arquivo']['name']);
$uploaded_extensao = substr($uploaded,strpos($uploaded,'.')+1,strlen($uploaded)-strpos($uploaded,'.'));
$imagem_destaque_tamanho = $_FILES['uploaded']['size'];
$imagem_destaque_descricao = $_POST['uploaded'];
$imagem_destaque_data = date('d/m/Y');
$uploaddir = "../xls_mysql/";
$data = mktime();
if ($uploaded != ""){
if (file_exists($uploaddir.$uploaded)){ $uploaded = mktime()."_".$uploaded; }
move_uploaded_file($HTTP_POST_FILES['arquivo']['tmp_name'], $uploaddir . $uploaded);
}else{
$uploaded = "";
}
require_once 'Excel/reader.php';
$excel = new Spreadsheet_Excel_Reader();
$excel->setOutputEncoding('CP1251');
$excel->read($uploaded);
$x=1;
$sep = ",";
ob_start();
while($x<=$excel->sheets[0]['numRows']) {
$y=1;
$row="";
while($y<=$excel->sheets[0]['numCols']) {
$cell = isset($excel->sheets[0]['cells'][$x][$y]) ? $excel->sheets[0]['cells'][$x][$y] : '';
$row.=($row=="")?"\"".$cell."\"":"".$sep."\"".$cell."\"";
$y++;
}
echo $row."\n";
$x++;
}
OBServações:
No “require_once” estaremos chamando o diretório “Excel”.
Este diretório contém ficheiros que tratam o XLS antes de iniciar a exportação para “CSV”.
Na internet ele pode ser encontrado facilmente. Basta você digitar no Google “phpExcelReader.zip” (existem vários sites oferecendo este ficheiro).
Na variável “$uploaddir” apontei para o diretório que estamos trabalhando. Faça a alteração para o caminho correto em seu Servidor.
3 – Altera conteúdo de XLS para CSV (conforme código a seguir).
$fp = fopen($uploaded.".csv",'w');
fwrite($fp,ob_get_contents());
fclose($fp);
ob_end_clean();
$conectar = new ConectaBanco();
$tabela = "tbl_carros";
$handle = file($arquivocsv);
for ($i=1;$i
Veja que nomeamos o ficheiro ".csv" com o nome da variável "$uploaded.csv".
Caso você queira verificar, foi criado um ficheiro com o mesmo nome neste diretório.
4 - Cadastramos o conteúdo exportado anteriormente de XLS para CSV no Banco de Dados MySQL (conforme código abaixo).
for ($i=1;$i
}else{
Nesta parte do código fazemos a inserção na base de dados.
OBS.: Como trata-se apenas de um exemplo, pegamos apenas 1 tabela e preenchemos 1 linha do ficheiro XLS.
E aí, gostou da matéria?
Ah, deu o erro a seguir?
- Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client
Resposta: Faça a atualização da sua base de dados MySQL para a versão 5.x.
Ah, não posso deixar de lhe dizer que para este conteúdo funcione corretamente, você precisa fazer uso do PHP 5.0 e MySQL 5.0, fazendo uso no Windows, ok?
Espero que esta solução seja útil pra você!
Código usado neste tutorial: Importar XLS Para MySQL VIA Script
16 Responses
Apareceu a mensagem The filename carro.xls is not readable
aqui tb. The filename modelo_acervo.xls is not readable
idem..
Cara aqui deu o mesmo problema ja utilizei .csv e .xls mais da is not readable se alguem conseguiu corrigir manda um e-mail ai dgs_gomes_silva@hotmail.com vlws abrass
$fp = fopen($uploaded.".csv",'rw'); e se usar rw? talvez funcione
Bem, não funciona! Houve alguma alteração?
Eu consigi importar mas ele manda caracteres estranhos
Depois de muito trabalho e correção no codido eu consegui importar o arquivo para dentro das pastas porém não envia para o banco de dados
Senhores depois de algumas correções no código ele esta copiando e alterando os arquivos perfeitamente, porém não esta gravando no banco de dados, alguem tem alguma sugestão?
Neuber, tem como enviar seu arquivo alterado para dar uma olhada?
Amigo, tem como enviar a parte do codigo que alterar para csv, pois nao estou conseguindo resolver !
deu o mesmo problema para mim, nao esta gravando no banco
Olá alguem conseguil? estou tentando mas não esta funcionando 🙁 alguem me ajdua?
E ai galera esse código não funciona muita coisa sem sentido
mudei essa parte e funcionou:
$fp = fopen($uploaded.".csv",'w');
fwrite($fp,ob_get_contents());
fclose($fp);
ob_end_clean();
$conectar = new ConectaBanco();
$tabela = "tbl_carros";
$handle = file($uploaded.'.csv');
"Depois de ter criado a tabela, clique no link da tabela e aparecerá um novo link que diz “Inserir arquivo texto na tabela”.
Isso não aparece
phpMyAdmin
Informação da versão: 4.6.5.2