Importação de Horas Planilha
Amigos,
Estou precisando de importar uma planilha que contém horas trabalhadas.
O meu problema é que na planilha tenho horas maior que 24horas e Horas negativas, no formato hh:mm
Ex:
Quando faço a importação, as horas maiores que 24h vem com o desconto de 24h.
Ex.
Para importação fiz da seguinte forma:
A saida correta deveria ser:
26:25 -> 2:25 -> -30:30 -> 10:08
Estou precisando de importar uma planilha que contém horas trabalhadas.
O meu problema é que na planilha tenho horas maior que 24horas e Horas negativas, no formato hh:mm
Ex:
26:25 02:25 -30:30 10:08 09:26
Quando faço a importação, as horas maiores que 24h vem com o desconto de 24h.
Ex.
26:25 -> 2:25 -> ERRADO 02:25 -> 2:25 -> certo -30:30 -> -6,30 -> ERRADO 10:08 -> 10:08 -> certo
Para importação fiz da seguinte forma:
Var sh : Variant;
Saldo : String;
Begin
Col2 := 3;
Wlinha := 1;
Repeat
SH := Busca_na_planilha(WLinha,Col2);
//Resultado do SH antes de formatar: 1,100694 -> 1,100694 -> -1,2708333 -> 0,4222
Saldo := FormatDateTime('hh:mm',SH);
//Resultado do Saldo após formatar: 2:25 -> 2:25 -> 6:30 -> 10:08
//Se SH negativa, coloco o sinal de negativo.
if Copy(Sh,1,1) = '-' then
Saldo := '-' + Saldo;
//Resultado final do Saldo após formatar: 2:25 -> 2:25 -> -6:30 -> 10:08
Inc(Wlinha);
until Wlinha > 10
End;
A saida correta deveria ser:
26:25 -> 2:25 -> -30:30 -> 10:08
Dirceu Morais
Curtidas 0
Respostas
Dirceu Morais
29/03/2023
Amigos, eu não encontrei uma solução para o problema mencionado. Procurei na internet e não encontrei.
Para resolver o problema - não sei se é a melhor solução - eu fiz da seguinte forma.
Para importação fiz da seguinte forma:
Para resolver o problema - não sei se é a melhor solução - eu fiz da seguinte forma.
Para importação fiz da seguinte forma:
Var sh : Variant;
Saldo : String;
i : Integer;
Begin
Wlinha := 1;
Repeat
SH := Busca_na_planilha(WLinha,3);
//Resultado do SH antes de formatar: 1,100694 -> 0,100694 -> -1,2708333 -> 0,4222
Saldo := FormatDateTime('hh:mm',SH);
//Resultado do Saldo após formatar: 2:25 -> 2:25 -> 6:30 -> 10:08
//AQUI EU VERIFICO SE A PARTE INTEIRO SO VALOR QUE EU BUSQUEI É MAIOR QUE ZERO.
//SE FOR MAIOR QUE ZERO, É PQ A HORA É MAIOR QUE 24H (24 = 1, 48 = 2, 72= 3....)
y := Abs(Trunc(Sh)); //Pego a parte inteira
if (y > 0) then //Ver se é maior que zero
Begin
y := 2400 * y; //Multiplico por 24horas
//1º Registro passa por aqui, 1*2400 = 2400 'mais' 2:25 = 26:25
//3º Registro passa por aqui, 1*2400 = 2400 'mais' 6:30 = 30:30
Saldo := Somar_Horas(Saldo,ConfiguraHora(IntToStr(y))); //Soma o SALDO + HORAS
End;
//Se SH negativa, coloco o sinal de negativo. No 3º Registro, passa aqui
if Copy(Sh,1,1) = '-' then
Saldo := '-' + Saldo;
//Resultado final do Saldo após formatar: 26:25 -> 2:25 -> -30:30 -> 10:08
Inc(Wlinha);
until Wlinha > 10
End;
GOSTEI 0
Arthur Heinrich
29/03/2023
var d Double; m : String; ... d:=SH; m:=IntToStr(trunc(Frac(d*24)*60)); if (Length(m)=1) then m:='0'+m; Saldo:=IntToStr(trunc(d*24))+':'+m; ...
GOSTEI 0
Stella Oliveira
29/03/2023
Para importar uma planilha que contém horas trabalhadas em formato hh:mm, incluindo horas maiores que 24 e horas negativas, em Delphi, você pode seguir os seguintes passos:
Para converter as horas do formato hh:mm para um formato que pode ser armazenado em um banco de dados, você pode usar a função StrToTime. Por exemplo:
Para lidar com horas maiores que 24 horas, você pode armazenar as horas em um TDateTime e, em seguida, subtrair a data de referência, que é 30 de dezembro de 1899. Por exemplo:
Para lidar com horas negativas, você pode armazenar as horas em um TDateTime e, em seguida, inverter o sinal do TDateTime. Por exemplo:
Para inserir as horas no banco de dados, você pode usar um parâmetro de TDateTime em uma instrução SQL. Por exemplo:
Lembre-se de adaptar o código de acordo com suas necessidades, como configurar as opções de tratamento de erros, ajustar as configurações de conexão e mapeamento de colunas, etc.
uses XlsFile;
var
xls: TXlsFile;
row, col: integer;
begin
xls := TXlsFile.Create;
try
xls.Open('caminho_para_o_arquivo.xls');
for row := 1 to xls.RowCount do
begin
for col := 1 to xls.ColCount do
begin
// Processa as células da planilha
end;
end;
finally
xls.Free;
end;
end;
Para converter as horas do formato hh:mm para um formato que pode ser armazenado em um banco de dados, você pode usar a função StrToTime. Por exemplo:
var horaStr: string; hora: TDateTime; begin horaStr := '27:30'; hora := StrToTime(horaStr); end;
Para lidar com horas maiores que 24 horas, você pode armazenar as horas em um TDateTime e, em seguida, subtrair a data de referência, que é 30 de dezembro de 1899. Por exemplo:
var hora: TDateTime; dataReferencia: TDateTime; dataHora: TDateTime; begin hora := EncodeTime(27, 30, 0, 0); dataReferencia := EncodeDate(1899, 12, 30); dataHora := hora - dataReferencia; end;
Para lidar com horas negativas, você pode armazenar as horas em um TDateTime e, em seguida, inverter o sinal do TDateTime. Por exemplo:
var horaNegativa: TDateTime; horaPositiva: TDateTime; begin horaNegativa := EncodeTime(-2, 30, 0, 0); horaPositiva := -horaNegativa; end;
Para inserir as horas no banco de dados, você pode usar um parâmetro de TDateTime em uma instrução SQL. Por exemplo:
var
command: TADOCommand;
begin
command := TADOCommand.Create(nil);
try
command.Connection := connection;
command.CommandText := 'INSERT INTO Tabela (HorasTrabalhadas) VALUES (:horasTrabalhadas)';
command.Parameters.ParamByName('horasTrabalhadas').Value := hora;
command.Execute;
finally
command.Free;
end;
end;
Lembre-se de adaptar o código de acordo com suas necessidades, como configurar as opções de tratamento de erros, ajustar as configurações de conexão e mapeamento de colunas, etc.
GOSTEI 0