Lendo Xls Dinâmico Para Visualização Em Tela
Lendo xls dinâmico para visualização em tela
Escrito por jonathan em
ASP. Data: 21/08/2007
Licença: Alguns direitos reservados. Dar créditos ao autor e linkar este original
Ver tópico original no fórum.
Quem já se quebrou pra ler um xls??
E quem ai precisa ler o xls sem saber a quantidade nem o nome das planilhas, linhas e colunas de cada planilha do arquivo??
Quer mais? Não precisa definir uma área (name) das células
Segue a solução que criei adaptada de códigos retirados na web com uma pitada de meu modesto conhecimento em Asp:
CODE
<%@Language="VBScript"%>
<%
'Autor : Jonathan R. Cardozo (jonathandj)
'Data criação : 14/08/2007
'Finalidade : Leitura de arquivo XLS (Excel 8.0) de forma dinâmica
Dim intColunas, intLinhas
Dim objConn, objRs, objTable
Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source="& Server.MapPath("pasta.xls") &";Extended Properties=Excel 8.0;"
.Open
End With
Set objTable = Server.CreateObject("ADOX.Catalog")
objTable.ActiveConnection = objConn
for j = 0 to objTable.tables.count - 1
if lcase(objTable.tables(j).Type) = "table" Then
set objRs = Server.CreateObject("ADODB.Recordset")
objRs.CursorLocation = 3
objRs.Open "SELECT * FROM ["&Cstr(Ucase(objTable.tables(j).Name))&"] ",objConn
intCount = 0
if Not objRs.Eof Then
intColunas = objRs.Fields.Count
Response.Write ("<table border=""1"">" & vbNewline)
If intCount = 0 Then
Response.Write ("<tr>" & vbNewline)
For i = 0 To (intColunas-1)
Response.Write ("<td><font size=""1"" face=""verdana""> " & objRs.Fields(i).Name & "</td>" & vbNewline)
next
Response.Write ("</tr>" & vbNewline)
End If
Do While Not objRs.Eof
Response.Write ("<tr>" & vbNewline)
For i = 0 To (intColunas-1)
Response.Write ("<td><font size=""1"" face=""verdana""> " & objRs.Fields(i).Value & "</td>" & vbNewline)
Next
response.write ("</tr>" & vbNewline)
objRs.MoveNext
Loop
Response.Write ("</table>" & vbNewline)
Response.Write ("Nome da Tabela(Planilha):" & Cstr(Ucase(objTable.tables(j).Name)) & vbNewline)
Response.Write ("<br/>" & vbNewline)
Response.Write ("Total Colunas: " & intColunas & vbNewline)
Response.Write ("<br/>" & vbNewline)
Response.Write ("Total Linhas: " & objRs.RecordCount +1 & vbNewline) ' o +1 é por causa da primeira linha que é o name da coluna
End If
objRs.Close
Set objRs = Nothing
Response.Write ("<br/>")
Response.Write ("<br/>")
end if
next
objConn.Close
Set objConn = Nothing
Set objTable = Nothing
%>
Arquivo usado nos testes:
http://www.allmarketweb.com/pasta.xls
Lembrando que esse código
não insere no banco, se tiver tempo faço e posto aqui a versão para gravar no DB
Espero que seja útil para alguem
Comentários:
gabrielmelo disse:
Tenho uma duvida, para pegar os caracteres das celulas até aí tranquilo.
Mas quando a celula tem uma função tipo: =(A1-A2)+(A3-A4) ou =1 + A12, e dessas funções retorna uma valor tipo, 12 ou 15, um numero qualquer, e mostrar esse valor, será que funciona ? OBS: na celula, o excel mostra o valor, mas quando vc ve, esse celula está formatada com uma função.
Será que o asp consegue trabalhar com essas funções ?
Abraaaço
Lucasbr disse:
jonathan disse:
David Cruvinel disse:
Parabéns jonathan...
Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).