Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

robertomurta

Importando Execel com ASP - Problemas com os tipos de dados

Recommended Posts

Galera, estou tentando importar uma base de dados em excel utilizando o ASP, mas se as primeiras linhas forem numéricas e tiver outros registros não numéricos na mesma coluna está ignorando esses dados.

 

É uma planilha com endereços, então as vezes na coluna do número tem 23 mas as vezes tem s/n.

 

E em algumas situações se tiver um número, mas não tiver "atualizado" o tipo de dados da célula também ignora esse valor.

 

Mas se todos os dados estiverem no mesmo formato funciona tudo direitinho.

 

Estou utilizando o ADODB.Connection com DRIVER={Microsoft Excel Driver (*.xls)};

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada no fórum que postei alguns exemplos de como importar, pode te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste seu código para analisarmos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Se eu só imprimir uma tabela desse select alguns dados "somem" porque o sistema está identificando que ele é de um tipo diferente do restante da coluna. Aí eu precisava conseguir enviar algum parametro para tentar ler todas as colunas como texto por exemplo. Já tentei formatar isso no excel e também não funcionou, porque para atualizar o tipo de dados eu tenho que entrar em célula por célula.



Const adOpenStatic = 3

Const adLockPessimistic = 2

Dim cnnExcel

Dim rstExcel

Dim I

Dim iCols

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../arquivos/"&objrs("arquivo")) & ";Extended Properties=""Excel 8.0;HDR=NO;"


Set cnnExcel = Server.CreateObject("ADODB.Connection")

cnnExcel.Open "DBQ=" & Server.MapPath("../arquivos/"&objrs("arquivo")) & "; DRIVER={Microsoft Excel Driver (*.xls)};"


'response.write "Começou:"&now()&"<BR><BR>"


Set rsXLS = cnnExcel.OpenSchema(20)

rsXLS.MoveFirst

Contatos = rsXLS("TABLE_NAME")



Set rstExcel = Server.CreateObject("ADODB.Recordset")

rstExcel.Open "SELECT * FROM [" & Contatos & "]", cnnExcel , adOpenStatic, adLockPessimistic

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um outro exemplo mais prático, tem uma coluna que é CEP, e se ele tiver o "-" para separar não importa alguns. Isso porque os outros ceps ele interpreta como número, mas esse não tem como ser numérico, e depois da planilha criada para atualizar o tipo do dado da célula tem que "entrar" em uma por uma, mas as planihas sempre possuem mais de 10.000 registros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roberto, vc já tentou fazer a sugestão do Post 3???

 

Faça a Conversão de seus dados antes de processar eles.

 

Procure exemplos tipo: string para numeros, etc....

 

Att,

 

William

Compartilhar este post


Link para o post
Compartilhar em outros sites

no CEP, por exemplo, recupere os dados e trate-os tirando o "-", deixe todos em um único padrão e veja comom esta definido o tipo do campo no seu bd

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa importar para BD ou deixar apenas visualmente HTML? Se quiser apenas exibir, vou postar uma solução que desenvolvi, você terá que criar uma pasta para subir teu arquivo:

<html>
<body>
<%
writeExcelData()
%>
</body>
</html>
<%
function writeExcelData()
Dim rs,sql,i
sql = "SELECT * FROM [huddata];"
if runsql(sql,rs) then
%>
<div align="center">
<table align="center" border="0" width="100%" style="border-style: dotted; border-width: 1px; font-family: Tahoma; Verdana; Geneva; Arial; Helvetica; sans-serif">
<thead>
<tr align="center" border="0" width="100%" style="border-style: dotted; border-width: 0px; background-color: #FFFF00">
<%
For I = 0 To rs.Fields.Count - 1
Response.Write "<th>" & rs.Fields.Item(I).Name & "</th>"
Next
%>
</tr>
</thead>
<tbody align="center" style="background-color: #EFEFEF">
<%
Do While Not rs.EOF
Response.Write "<tr>"
For I = 0 To rs.Fields.Count - 1
Response.Write "<td>" & rs.Fields.Item(I).Value & "</td>"
Next
Response.Write "</tr>"
rs.MoveNext
Loop
%>
</tbody>
</table>
</div>
<%
rs.Close
end if
Set rs = Nothing
end function
function runSQL(SQL,rs)
on error resume next
dim myrs
set myRs = createobject("ADODB.recordset")
myRs.Open SQL,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../Userfiles/arquivo_um.xls") & ";Extended Properties=""Excel 8.0;IMEX=1;""", 1, 3
set rs = myRs
if err then
runSQL = false
response.write err.description
else
runSQL = true
end if
end function
%>

Altere este trecho:

MapPath("../Userfiles/arquivo_um.xls")

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então galera algumas respostas ai o pessoal não entendeu o problema, eu tenho um excel que vem de uma outra empresa, e ao dar um select nele eu já perco as informações, eu não tenho como fazer a formatação dos dados antes do select.

 

 

Não consegui resolver meu problema com asp e tive que apelar para o php mesmo, que me deu a opção de simplismente pegar o conteúdo de uma determinada célular sem tentar identificar o tipo de dados dela!

 

Valeu pela ajuda, e caso alguém saiba a solução posta ai para quem sabe futuramente ser útil para outras pessoas também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste como esta em php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde pessoal....
Passei por este problema muitos meses depois do nosso amigo... Mas encontrei a solução neste endereço abaixo.

http://www.codeproject.com/Questions/250527/OleDb-Connection-not-reading-all-the-rows-from-exc

Basicamente, na string de conexão existe um parâmetro que vc indica que pode haver valores de tipos diferentes misturados em uma mesma coluna. É o IMEI=1. Assim o provider para de ignorar dados que ele julga diferente do esperado.

No link acima existe um exemplo descrito como solução do problema!
abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

este é em .Net, mas também pode usar o componente OWC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.