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.