Importação de Horas Planilha
29/03/2023
0
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
Posts
30/03/2023
Dirceu Morais
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;
30/03/2023
Arthur Heinrich
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; ...
30/03/2023
Stella Oliveira
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.
Clique aqui para fazer login e interagir na Comunidade :)