Ir para conteúdo
Fórum Script Brasil
  • 0

Excel 2003 X Vb.net 2003 (mais Uma)


Natarelli

Pergunta

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 que 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.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Não sei o que pode estar acontecendo, mas eu posso lhe recomandar fazer isso via automação (CreateObject()), se for o caso da tabela não ser muito grande (o que poderia deixar o processo de preenchimento da DataTable um pouco demorado).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

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)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...