Como eu retorno uma query de um arquivo Excel ?

NOTA: Para usar a solução abaixo, seu servidor ColdFusion deve permitir a voce criar objetos Java. Muitos hosts compartilhados não permitem isso.

JDBC ODBC do Java permite voce conectar-se a um arquivo Microsof Excel. Então, usando as classes SQL do Java, podemos ler esse arquivo e retornar certas tabelas ao objeto query do ColdFusion.

Esta função retorna o objeto query do ColdFusion, de modo que voce possa utilizar a metodologia “Query of Queries” e retornar os dados que voce necessita.

Uma possível localização para essa função seria dentro de um componente chamado MicrosoftUtil.cfc ou alguma coisa igualmente descritiva.

<cffunction name="getExcelSheet" access="public" output="false" returntype="query">
     <cfargument name="filename" required="true" type="string" />
     <cfargument name="sheetName" required="true" type="string" />
     <cfscript>
          var c = "";
          var stmnt = "";
          var rs = "";
          var sql = "Select * from [#sheetName#$]";
          var myQuery = "";
          arguments.filename = expandPath(arguments.filename);
          if(len(trim(arguments.filename)) and fileExists(arguments.filename)){
               try{
                    CreateObject("java","java.lang.Class").forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
                    c = CreateObject("java","java.sql.DriverManager").getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=" & arguments.filename );
                    stmnt = c.createStatement();
                    rs = stmnt.executeQuery(sql);
                    myQuery = CreateObject('java','coldfusion.sql.QueryTable').init(rs);
               }catch(any e){
                    // error-handling code
               }
          }
          return myQuery;
     </cfscript>
</cffunction>

To use the function simply use the following syntax:

getExcelSheet("myFile.xls","productsSheet")

Where myFile.xls is a relative path to your Excel file and productsSheet is the name of the sheet inside the Excel file that you would like to return.

by Kyle Hayes


Leave a comment