Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal,
Estou com um problema que está me deixando maluca já. Tenho um Excel e preciso lê-lo e jogá-lo em formato txt. Beleza, funciona só que o único e maior problema: quando a primeira linha – de qualquer coluna – for null, todo o resto da coluna, mesmo tendo valor, fica tudo null!
Já tentei de tudo quanto é forma, mudando a conexão, usando fso, sem, apenas com Excel, tentei fazer update mas ele simplesmente ignora tudo.
Alguém tem alguma sugestão para resolver isso? Eu já achei uma saída que realmente ficará difícil de usar: pedir pro usuário inserir valor 0 quando não tiver nada naquela coluna. Gostaria de achar uma solução pelo sistema e não via usuário.
obrigada
eu já tinha tentado desta forma mas no loop ele já printa null, entao pra ele tudo cai no true para null :(
como você esta recuperando os dados ?
Desta forma:
<%
response.charset = "iso-8859-1"
Response.Clear
Response.Buffer = True
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Set objUpload = server.CreateObject("Dundas.Upload.2")
objUpload.MaxFileSize = 300048576
objUpload.UseVirtualDir = true
objUpload.UseUniqueNames = true
objUpload.Save "/docs"
For Each File in objUpload.Files
arquivo = objUpload.GetFileName(File.Path)
Next
Set objUpload = Nothing
Set oADOX = CreateObject("ADOX.Catalog")
strSQLStatement = "Select * from [nome_sheet$]"
Set objAdCon = CreateObject("ADODB.Connection")
objAdCon.Open "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ="&server.MapPath(arquivo)& "; Readonly=True"
Set objAdRs = CreateObject("ADODB.Recordset")
objAdRs.CursorLocation=3
objAdRs.Open strSQLStatement, objAdCon, 1, 3
oADOX.ActiveConnection = objAdCon
if instr(oADOX.Tables(0).name,"nome_sheet") = 0 then
response.write "Arquivo Inválido"
response.end
end if
Set fso = CreateObject("Scripting.FileSystemObject")
arquivo = "txt_"& arquivo
Set txt = fso.CreateTextFile(server.MapPath(arquivo),True)
txt.WriteLine "Coluna1"&vbtab&"Coluna2"&vbtab&"Coluna3"&vbtab&"Coluna4"&vbtab&"Coluna5"
While not objAdRs.EOF
coluna1 = cstr(objAdRs(0)&"")
coluna2 = cstr(objAdRs(1)&"")
coluna3 = cstr(objAdRs(2)&"")
coluna4 = cstr(objAdRs(3)&"")
coluna5 = cstr(objAdRs(4)&"")
txt.WriteLine coluna1&vbtab&coluna2&vbtab&coluna3&vbtab&coluna4&vbtab&coluna5
objAdRs.movenext
wendAndréia, poque não faz a verificação, tipo... verifica se o primeiro valor é null se for manda ler a partir do segundo que dai evita erro.
[]'s
isso foi falado no post #2
quebrando a cabeça mais um pouco, cheguei a conclusão que o problema é a maldita formatação do excel. Por exemplo, o usuario faz o download do modelo, completa os valores, e envia o excel para o sistema que faz a extração dos dados e insere na base. Se a coluna X está formatada como money, o usuario só pode inserir valores no formato money. ok. Formatei o modelo para TEXT, só que aí vem outro provavel problema, se o usuario for colar algum valor, ou os dados vir por vlookup ? A formatação ficará diferente e consequentemente recebo null naquela célula!
gente nao é possivel que aconteça uma coisas dessas nao faz sentido ser assim, porque a formatação vai interferir tanto desta forma?!!!
eu ACHO que consegui! pelo menos nos ultimos testes nao deu problema.
Consultando o link: http://support.microsoft.com/kb/260239/pt-br
adicionei:
response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-excel"
quando tiver certeza passo aqui pra avisar, desde já agradeço!
tente verficar antes se é IsNull, ela devolve True ou False, a indicar se uma variável não contém dados válidos 'Null'.