CSV para banco de dados…

Existem mil e uma maneiras (invente uma!) de se mandar dados de uma planilha em Excel para um banco de dados, mas uma maneira interessante é exportar os dados para um arquivo .CSV e através de um script jogar os dados no database:

<cffile action=”read” file=”c:tempdados.csv” variable=”csvFile”>

<cfquery name=”migra” datasource=”datasource”>

<cfloop index=”i” list=”#csvFile#” delimiters=”#chr(10)##chr(13)#”>
INSERT INTO contatos (IDstatus, nome, instituicao, telefone, email)
VALUES (1, #ListChangeDelims(ListQualify(i,”‘”,”;”),”,”,”;”)#);
</cfloop>

</cfquery>

Primeiro lê-se o arquivo .csv com os dados exportados da planilha em Excel e faz-se um loop sob o arquivo, usando uma quebra de linha como delimiter da “lista” (que é o .csv lido).

A função ListQualify coloca um apóstrofo (‘) antes de depois de cada ponto-e-vírgula (;), o que quer dizer que Nome do Fulano; Sobrenome do Fulano se transforma em ‘Nome do Fulano’;’Sobrenome do Fulano’.

A outra função usada, ListChangeDelims, bem, essa tá na cara :o) Ela muda o delimiter de ponto-e-vírgula para a vírgula propriamente dita, que é a usada para separar os valores na query.

E por fim, o cfloop está dentro da query por uma questão de performance: conecta-se ao banco de dados apenas uma vez, mandando um único statement sql completo, com todos os dados a serem inseridos. Note o ponto-e-vírgula ao final do VALUES (….).