StrToFloatDef com erro de converssão

Delphi

13/04/2012

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.
Léo Serrão

Léo Serrão

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

13/04/2012

Qual está sendo exatamente o erro?
GOSTEI 0
Léo Serrão

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

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

Léo Serrão

13/04/2012

É boa a sua dica, mas continua ocorrendo o erro: Invalid Variant type conversion.
GOSTEI 0
Bruno Leandro

Bruno Leandro

13/04/2012

tenta desta forma

Volume:= StrToFloatDef(StrToFloat(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE)), 0);
GOSTEI 0
Léo Serrão

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

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

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!
GOSTEI 0
Marco Salles

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!


em

http://www.activedelphi.com.br/forum/viewtopic.php?t=72644&sid=3cdfa13f90edbc868a5ee777fd3365b5

estamos lá e estamos aqui
GOSTEI 0
POSTAR