Natarelli
06-20-2006, 08:50 PM
Mas uma do Excel com o VB.NET, que digasse de passagem, trabalham na mesma
plataforma e são totalmente integrados (reza a lenda microsoft!).
Amigos,
Problema, mais um, é o seguinte:
Meu sistema lê uma planilha excel e carrega um dataset. Em algumas máquinas
funciona perfeitamente em outras máquinas as colunas que estão definidas como
numéricas no excel são carregadas no dataset como null.
Fiz o seguinte teste, transformei as colunas do excel que estão definidas
como numéricas para texto. Bem, aê o problema se inverte. Nas máquinas que
funcionavam com as colunas definidas como numéricas o valor é carregado no
dataset como null e nas máquinas que não funcionavam com as colunas definidas
como numérica o valor é carregado sem problemas.
Deu pra entender?!
Exemplo:
Col excel numérica DataSetMáquina1 DataSetMáquina2
1,00 1,00 null
2,00 2,00 null
Quando transformo a coluna para texto:
Col excel texto DataSetMáquina1 DataSetMáquina2
1,00 null 1,00
2,00 null 2,00
Alguém tem alguma idéia do q possa estar ocorrendo?
Já verifiquei as configurações da máquina no painel de controle e todas as
máquinas estão iguais.
Desde já agradeço.
Natarelli
06-21-2006, 08:31 PM
Problema resolvido:
1) Criação do DataTable via código
2) Leitura da planilha excel linha a linha, carregando no DataTable
Ficou muito mais lento que no método anterior, mas foi a única forma que
consegui para resolver o problema.
Código Anterior:
cmd_xls = New OleDbDataAdapter("SELECT * FROM [" & NomePlanilha & "$] ", conn)
cmd_xls.Fill(dt_xls)
E o código ficou assim:
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.String")
dc_xls_Coluna.ColumnName = "ITEM"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.String")
dc_xls_Coluna.ColumnName = "DESCRICAO"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.String")
dc_xls_Coluna.ColumnName = "SERVICO"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.String")
dc_xls_Coluna.ColumnName = "UN"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.Decimal")
dc_xls_Coluna.ColumnName = "VALOR"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.Decimal")
dc_xls_Coluna.ColumnName = "QTD"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
dc_xls_Coluna = New DataColumn
dc_xls_Coluna.DataType = System.Type.GetType("System.Decimal")
dc_xls_Coluna.ColumnName = "TOTAL"
dc_xls_Coluna.ReadOnly = True
dc_xls_Coluna.Unique = False
dt_xls.Columns.Add(dc_xls_Coluna)
For D = 12 To sheet.Range("A65536").End(Excel.XlDirection.xlUp).Row - 2
If Not sheet.Range("A" & D & "").Value Is System.DBNull.Value And
sheet.Range("A" & D & "").Value <> Nothing Then
dr_xls_Linha = dt_xls.NewRow
dr_xls_Linha("ITEM") = sheet.Range("A" & D & "").Value
dr_xls_Linha("DESCRICAO") = sheet.Range("B" & D & "").Value
dr_xls_Linha("SERVICO") = sheet.Range("C" & D & "").Value
dr_xls_Linha("UN") = sheet.Range("D" & D & "").Value
If Not sheet.Range("E" & D & "").Value Is System.DBNull.Value And
sheet.Range("E" & D & "").Value <> Nothing Then
dr_xls_Linha("VALOR") = sheet.Range("E" & D & "").Value
dr_xls_Linha("QTD") = sheet.Range("F" & D & "").Value
dr_xls_Linha("TOTAL") = sheet.Range("G" & D & "").Value
End If
dt_xls.Rows.Add(dr_xls_Linha)
End If
Next D
dts_xls.Tables.Add(dt_xls)
"Natarelli" escreveu:
> Mas uma do Excel com o VB.NET, que digasse de passagem, trabalham na mesma
> plataforma e são totalmente integrados (reza a lenda microsoft!).
>
> Amigos,
>
> Problema, mais um, é o seguinte:
>
> Meu sistema lê uma planilha excel e carrega um dataset. Em algumas máquinas
> funciona perfeitamente em outras máquinas as colunas que estão definidas como
> numéricas no excel são carregadas no dataset como null.
>
> Fiz o seguinte teste, transformei as colunas do excel que estão definidas
> como numéricas para texto. Bem, aê o problema se inverte. Nas máquinas que
> funcionavam com as colunas definidas como numéricas o valor é carregado no
> dataset como null e nas máquinas que não funcionavam com as colunas definidas
> como numérica o valor é carregado sem problemas.
>
> Deu pra entender?!
>
> Exemplo:
>
> Col excel numérica DataSetMáquina1 DataSetMáquina2
>
> 1,00 1,00 null
>
> 2,00 2,00 null
>
> Quando transformo a coluna para texto:
>
> Col excel texto DataSetMáquina1 DataSetMáquina2
>
> 1,00 null 1,00
>
> 2,00 null 2,00
>
> Alguém tem alguma idéia do q possa estar ocorrendo?
>
> Já verifiquei as configurações da máquina no painel de controle e todas as
> máquinas estão iguais.
>
> Desde já agradeço.
>