View Full Version : EXCEL 2003 x VB.NET 2003


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