StrToFloatDef com erro de converssão
Olá pessoal!
Eu desenvolvi um programinha no delphi 6, versão que a empresa que trabalho possui licença, para importar para o banco de dados (SQL Server 2000) dados a partir de uma planilha do Excel. Ele está funcionando exceto quando o valor da célula que estou lendo, que deveria ser um valor string convertido em float, é #DIV/0! ele dá um erro de converssão, observe a linha de código:
Faço um loop que lê linha por linha da planilha e converte de string para float. Declarei no delphi uma variável do tipo real para receber este valor:
Volume:= StrToFloatDef(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE, 0);
A função converte normalmente valores númericos. Mas no caso do erro #DIV/0! na célula o programa interrompe a execução. Quando a função StrToFloatDef não conseguisse converter era para atribuir a variável o valor zero. Mas não está acontecendo. Alguém pode me ajudar a resolver essa conversão.
Grato pela ajuda.
Eu desenvolvi um programinha no delphi 6, versão que a empresa que trabalho possui licença, para importar para o banco de dados (SQL Server 2000) dados a partir de uma planilha do Excel. Ele está funcionando exceto quando o valor da célula que estou lendo, que deveria ser um valor string convertido em float, é #DIV/0! ele dá um erro de converssão, observe a linha de código:
Faço um loop que lê linha por linha da planilha e converte de string para float. Declarei no delphi uma variável do tipo real para receber este valor:
Volume:= StrToFloatDef(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE, 0);
A função converte normalmente valores númericos. Mas no caso do erro #DIV/0! na célula o programa interrompe a execução. Quando a função StrToFloatDef não conseguisse converter era para atribuir a variável o valor zero. Mas não está acontecendo. Alguém pode me ajudar a resolver essa conversão.
Grato pela ajuda.
Léo Serrão
Curtidas 0
Respostas
Joel Rodrigues
13/04/2012
Qual está sendo exatamente o erro?
GOSTEI 0
Léo Serrão
13/04/2012
Erro de conversão o Delphi não consegue converter #DIV/0! para float isso é fato, mas a função StrToFloatDef também não está atribuindo o zero como deveria fazer.
GOSTEI 0
Marco Salles
13/04/2012
Erro de conversão o Delphi não consegue converter #DIV/0! para float isso é fato, mas a função StrToFloatDef também não está atribuindo o zero como deveria fazer.
Voce tem que converter este Variant para String .. Utilize o VarToStr
Volume:= StrToFloatDef(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE), 0);
GOSTEI 0
Léo Serrão
13/04/2012
É boa a sua dica, mas continua ocorrendo o erro: Invalid Variant type conversion.
GOSTEI 0
Bruno Leandro
13/04/2012
tenta desta forma
Volume:= StrToFloatDef(StrToFloat(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE)), 0);
Volume:= StrToFloatDef(StrToFloat(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE)), 0);
GOSTEI 0
Léo Serrão
13/04/2012
Bruno o código que você postou gera um erro: Incompatible types: String and Extended
GOSTEI 0
Marco Salles
13/04/2012
É boa a sua dica, mas continua ocorrendo o erro: Invalid Variant type conversion.
engraçado , testei nesses dois casos aaixo e não deu erro nenhum
var volume:real; V:Variant; begin V:=#DIV/0!; Volume:= StrToFloatDef(VarToStr(v), 0); showmessage(floattostr(volume)); ClientDataSet1.Append; ClientDataSet1Salario.AsVariant:=#DIV/0!; ClientDataSet1.Post; Volume:= StrToFloatDef(VarToStr(ClientDataSet1Salario.Value), 0); showmessage(floattostr(volume));
GOSTEI 0
Léo Serrão
13/04/2012
A saída que encontrei foi essa:
try
cell14:= StrToFloatDef(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[plan].Cells[Linha,21].value), 0);
Except
cell14:= 0.0;
end;
Funcionou. Sempre que o programa se depara com o valor #DIV/0! ele colocar 0.0
Muito obrigado pela dicas!
try
cell14:= StrToFloatDef(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[plan].Cells[Linha,21].value), 0);
Except
cell14:= 0.0;
end;
Funcionou. Sempre que o programa se depara com o valor #DIV/0! ele colocar 0.0
Muito obrigado pela dicas!
GOSTEI 0
Marco Salles
13/04/2012
A saída que encontrei foi essa:
try
cell14:= StrToFloatDef(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[plan].Cells[Linha,21].value), 0);
Except
cell14:= 0.0;
end;
Funcionou. Sempre que o programa se depara com o valor #DIV/0! ele colocar 0.0
Muito obrigado pela dicas!
try
cell14:= StrToFloatDef(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[plan].Cells[Linha,21].value), 0);
Except
cell14:= 0.0;
end;
Funcionou. Sempre que o programa se depara com o valor #DIV/0! ele colocar 0.0
Muito obrigado pela dicas!
em
http://www.activedelphi.com.br/forum/viewtopic.php?t=72644&sid=3cdfa13f90edbc868a5ee777fd3365b5
estamos lá e estamos aqui
GOSTEI 0