GARANTIR DESCONTO

Fórum StrToFloatDef com erro de converssão #415368

13/04/2012

0

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

Responder

Posts

13/04/2012

Joel Rodrigues

Qual está sendo exatamente o erro?
Responder

Gostei + 0

13/04/2012

Léo Serrão

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

Gostei + 0

14/04/2012

Marco Salles

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);
Responder

Gostei + 0

16/04/2012

Léo Serrão

É boa a sua dica, mas continua ocorrendo o erro: Invalid Variant type conversion.
Responder

Gostei + 0

16/04/2012

Bruno Leandro

tenta desta forma

Volume:= StrToFloatDef(StrToFloat(VarToStr(EXCEL.WORKBOOKS[1].SHEETS[PLAN].CELLS[LINHA, 14].VALUE)), 0);
Responder

Gostei + 0

16/04/2012

Léo Serrão

Bruno o código que você postou gera um erro: Incompatible types: String and Extended
Responder

Gostei + 0

16/04/2012

Marco Salles

É 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));
Responder

Gostei + 0

16/04/2012

Léo Serrão

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!
Responder

Gostei + 0

16/04/2012

Marco Salles

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar