ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Importar hora no formato hh:mm do excel para CDS?
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Mai 17, 2009 12:53 am    Assunto: Importar hora no formato hh:mm do excel para CDS? Responder com Citação

Pessoal, alguém sabe me dizer como jogar um campo horas de uma tabela excel com formato de [hh]:mm no dbgrid?

Formatei a planilha do excel para formato de [hh]:mm para jogar valores acima de 23:59, pois trabalho com horas acima das 24:00.

Bom na celula do excel formatei um horario que é 39:26, mais quando jogo no dbgrid fica assim 01/01/1900 15:26:00

E não consegui formatar no displayformat do componente para ficar como 39:26.

Estou usando componentes do ADO.

Estou tentando jogar os valores assim num CDS
Código:
 ADOTable1.First;
     while not ADOTable1.Eof do
     begin

        if (ADOTable1AdNot.asString <> '') then
        begin
          ClientDataSet1.Insert;
          ClientDataSet1NOME.AsString := ADOTable1ADMINISTRATIVO.String  ;               
          ClientDataSet1VARIAVEIS.Value := ADOTable1AdNot.Value;
          ClientDataSet1.Post;
        end;
ADOTable1.Next;
     end;
     ClientDataSet1.IndexFieldNames := 'NOME';


Meu problema esta aqui
ClientDataSet1VARIAVEIS.Value := ADOTable1AdNot.Value;
Se eu não formato o displayformat ele me traz desta forma
01/01/1900 15:26:00

Se eu formato o displayformat assim hh:mm, o resultado fica assim:
15:26

Mas preciso que fique assim:
39:26

Acho que o problema nem seja no componente, e sim no excel, mais não sei como formatar esta droga de hora para ficar como preciso.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Mai 17, 2009 4:16 pm    Assunto: Responder com Citação

Olá adriano...

Bom amigo isto que vc quer é impossível desta maneira, pois o tipo TDateTime e TTime não aceitarão tal, pois isto foge ao escopo dos mesmo que é armazenar horas, nõ acumulá-las, portanto o máximo que vc conseguirá será armazenar 24:00 ou seja 23:59:999 e é por isto que vc não vai conseguir tal...

o unico modo é vc fazer uma função para guardar isto como uma string ou guardar como um inteiro assim vc pode guardar 39:27 ou seja 2367 minutos, o excel vc pode acumular horas mas no delphi nõa se tem um tipo que faça a mesma coisa o que é uma pena realmente...



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Mai 17, 2009 4:46 pm    Assunto: Responder com Citação

johnny-walker escreveu:
Olá adriano...

Bom amigo isto que vc quer é impossível desta maneira, pois o tipo TDateTime e TTime não aceitarão tal, pois isto foge ao escopo dos mesmo que é armazenar horas, nõ acumulá-las, portanto o máximo que vc conseguirá será armazenar 24:00 ou seja 23:59:999 e é por isto que vc não vai conseguir tal...

o unico modo é vc fazer uma função para guardar isto como uma string ou guardar como um inteiro assim vc pode guardar 39:27 ou seja 2367 minutos, o excel vc pode acumular horas mas no delphi nõa se tem um tipo que faça a mesma coisa o que é uma pena realmente...



bye
Olá Johnny, blz amigo.

E como faço para isso funcionar?
No excel o formato da celula esta assim:
Citação:
Formato de hora que permite valores superiores a 23h59. Como padrão, todo formato de hora do Excel inclui a data e a hora. Portanto, se você digitar 08:00 em uma célula, o programa interpretará 08:00 do dia 1. Assim, se você digitar 25:00, o Excel entenderá como 01:00 do dia 2.

Para evitar esse problema, selecione a célula em questão, escolha Formatar / Células, marque a categoria Hora no painel da esquerda e, no painel Tipo, selecione o sétimo formato disponível (“37:30:55”). Clique OK para confirmar.

Que é a forma correta que preciso, mais no ADO traz em vez do valor dos 39:26, soma-se as 24:00 de um dia + 15:26 que ultrapassa para o proximo dia, ai no dbgrid aparece apenas o ultimo valor.

Achei que poderia ser feito desta forma aqui
Código:
if ADOTable1AdNot.AsDateTime > StrToTime('23:59') then
            begin
              somaHora := StrToTime('23:59') + ADOTable1AdNot.Value;
              ClientDataSet1VARIAVEIS.Value  := TimeToStr(SomaHora);
            end else
            begin
              ClientDataSet1VARIAVEIS.Value  := TimeToStr(ADOTable1AdNot.Value);
            end;
            ClientDataSet1.Post;


Mais vi, que não é tão simples assim Very Happy
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
RodrigoFarias
Experiente
Experiente


Registrado: Domingo, 27 de Julho de 2008
Mensagens: 443

MensagemEnviada: Dom Mai 17, 2009 6:02 pm    Assunto: Responder com Citação

Por curiosidade, pq dos valores acima de 24:00 ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Mai 17, 2009 6:27 pm    Assunto: Responder com Citação

RodrigoFarias escreveu:
Por curiosidade, pq dos valores acima de 24:00 ?
Olá amigo, é por causa que é uma tabela de acúmulos de Adicional noturno, e também horas extras durante o mês.

Um funcionário que trabalha todo dia das 22:00 as 05:00, se vc somar em média de 25 dias * 7:00 hora dia/mês, ai ver que ultrapassa as 24:00.

Ou seja, estou trabalhando com horas acumuladas durante o mês.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Mai 17, 2009 7:22 pm    Assunto: Responder com Citação

Como disse adriano, no delphi isto não será possível, mas vc pode contornar isto facilmente... como te disse no post acima...



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Jul 30, 2009 11:08 pm    Assunto: Responder com Citação

johnny-walker escreveu:
Como disse adriano, no delphi isto não será possível, mas vc pode contornar isto facilmente... como te disse no post acima...



bye
Olá Johnny, tem alguma idéia como carrego a tabela que vem do excel ja convertido em minutos então?

Ou seja:

No excel supondo que o valor esteja assim
25:00

quero carregar esta tabela no delphi usando o ADO trazendo convertido em minutos = 1500 min.

Assim posso trabalhar com minutos então.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sex Jul 31, 2009 10:22 am    Assunto: Responder com Citação

não tem, mas é só fazer:



Código:
function HoraToStr(Hora : TDateTime) : string;
var
  I2 : Integer;
begin
  I2 := Trunc(Frac(Hora) * 24 * 60);
  Result := Format('%.2d:%.2d', [Trunc(Hora) * 24 + I2 div 60, I2 mod 60]);
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Jul 31, 2009 10:19 pm    Assunto: Responder com Citação

gilsonnrodrigues escreveu:
não tem, mas é só fazer:



Código:
function HoraToStr(Hora : TDateTime) : string;
var
  I2 : Integer;
begin
  I2 := Trunc(Frac(Hora) * 24 * 60);
  Result := Format('%.2d:%.2d', [Trunc(Hora) * 24 + I2 div 60, I2 mod 60]);
end;
Boa noite Gilson Rodrigues. O problema é que o componente adoquery esta ligado diretamente na tabela do excel, ele já carrega diretamente por isso é que vem ja convertido. A não ser que dê para aplicar a função antes de carregar diretamente na tabela. Isso é possível?

Obrigado pela ajuda.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sáb Ago 01, 2009 5:44 pm    Assunto: Responder com Citação

leia como datatime e não como time

viu q o param é TDateTime?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Ago 04, 2009 10:27 pm    Assunto: Responder com Citação

gilsonnrodrigues escreveu:
leia como datatime e não como time

viu q o param é TDateTime?
Agradeço sua a ajuda, mais não sei como usar esta função diretamente ao carregar o componente ADOTable.

Este ADOTable esta buscando os dados diretamente do xls. Então la na planilha esta assim 25:00 e quando carrega no dbgrid apareçe somente 01:00, ou seja como utrapassa as 24:00 horas ele busca apenas o que utrapassou.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qua Ago 05, 2009 9:38 am    Assunto: Responder com Citação

se vc mandar mostrar o valor campo q tem a hora assim:


ShowMessage(FloatToStr(SeuCampo.Value));

q valor mostra? esse q é 25:00

??
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Ago 05, 2009 7:58 pm    Assunto: Responder com Citação

gilsonnrodrigues escreveu:
se vc mandar mostrar o valor campo q tem a hora assim:


ShowMessage(FloatToStr(SeuCampo.Value));

q valor mostra? esse q é 25:00

??
Boa noite, usando a conversão acima mostra 2,04166666666667

Usando conversão TimeToStr moustra 01:00

e na planilha esta assim 25:00.

Obs: a celula da planilha esta no seguinte formato: HORA --> 876613:37
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 06, 2009 9:25 am    Assunto: Responder com Citação

então cara.

a funçao q postei vai funcionar perfeitamente.

teste o seguinte agora:


ShowMessage(HoraToStr(SeuCampo.Value));

o q mostra?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Ago 06, 2009 10:35 pm    Assunto: Responder com Citação

gilsonnrodrigues escreveu:
então cara.

a funçao q postei vai funcionar perfeitamente.

teste o seguinte agora:


ShowMessage(HoraToStr(SeuCampo.Value));

o q mostra?
O valor fica em 48:59
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB