Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Macro para pasar una fecha a Excel

Estas en el tema de Macro para pasar una fecha a Excel en el foro de C/C++ en Foros del Web. Hola. Quiero crear una macro o una función que me permita pasar una fecha Excel a número y viceversa. Para Excel, el número 1 es ...
  #1 (permalink)  
Antiguo 11/06/2009, 04:34
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Macro para pasar una fecha a Excel

Hola. Quiero crear una macro o una función que me permita pasar una fecha Excel a número y viceversa.
Para Excel, el número 1 es el 1 de enero de 1900, el 2 es el 2 de enero de 1900 y así sucesivamente.
Hoy 11 de junio de 2009 es el número 39975.

Ya he creado la macro que me pasa una fecha a número. Es la siguiente:

Código c++:
Ver original
  1. #define FechaExcel(anno,mes,dia,hora,minuto) (((anno)-1900)*365.25+((anno)%4==0?0:1)+int((mes)*30.5)-30+((mes)>2?((anno)%4==0?-1:-2):0)+(((mes)-9)*((mes)-11)==0 ?1:0)+float(dia)+float(hora)/24.+float(minuto)/1440.)

Para pasar del número a la fecha he creado un macro y dos funciones, que describo abajo. Mi pregunta es si alguien sabe si este trabajo ya está hecho y si no, si es correcto lo que he escrito y si es posible simplificarlo:

Código c++:
Ver original
  1. #define ano(fecha) int(1900+(fecha-1)/365.25)
Código c++:
Ver original
  1. int mes(int fecha){
  2.     // devuelve el mes correspondiente a esta fecha
  3.     // primero recalcula la fecha quitándole la cantidad correspondiente a los cuatrienios
  4.     int nfecha = fecha-int((fecha-1)/1461)*1461;
  5.     // si está en el cuarto año del cuatrienio
  6.     if(nfecha > 1461-365)   nfecha-=(1461-365);
  7.     // si está en el tercer año
  8.     else if(nfecha > 1461-365-365)  nfecha-=(1461-365-365);
  9.     // si está en el segundo año
  10.     else if(nfecha > 1461-365-365-365)  nfecha-=(1461-365-365-365);
  11.     int dmes[]={0.,31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31.};
  12.     bool bisiesto = (int(4*(fecha-1)/1461)%4 == 0);
  13.     if(bisiesto)    dmes[2] = 29.;
  14.     for(int i=1;i<13;i++){
  15.         dmes[i] += dmes[i-1];
  16.         if(dmes[i] >= nfecha)
  17.             return(i);
  18.     }
  19.     MessageBox(0,"error en el mes","error",0);
  20.     return(0);
  21. }
Código c++:
Ver original
  1. int dia(int fecha){
  2.     // devuelve el dia correspondiente a esta fecha
  3.     // primero recalcula la fecha quitándole la cantidad correspondiente a los cuatrienios
  4.     int nfecha = fecha-int((fecha-1)/1461)*1461;
  5.     // si está en el cuarto año del cuatrienio
  6.     if(nfecha > 1461-365)   nfecha-=(1461-365);
  7.     // si está en el tercer año
  8.     else if(nfecha > 1461-365-365)  nfecha-=(1461-365-365);
  9.     // si está en el segundo año
  10.     else if(nfecha > 1461-365-365-365)  nfecha-=(1461-365-365-365);
  11.     float dmes[]={0.,31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31.};
  12.     bool bisiesto = (int(4*(fecha-1)/1461)%4 == 0);
  13.     if(bisiesto)    dmes[2] = 29.;
  14.     for(int i=1;i<13;i++){
  15.         dmes[i] += dmes[i-1];
  16.         if(dmes[i] >= nfecha)
  17.             return(nfecha - dmes[i-1]);
  18.     }
  19.     MessageBox(0,"error en el día","error",0);
  20.     return(0);
  21. }
  #2 (permalink)  
Antiguo 11/06/2009, 06:24
 
Fecha de Ingreso: febrero-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Macro para pasar una fecha a Excel

Yo escribi una libreria en c++ para tratar con este tema, pero todavía hay que retocarla un poco sobre todo en lo que hace al tratamiento de años biciestos.
Si queres te la paso, pero tenemos que encontrar una manera por que no me dejan poner links todavía.
  #3 (permalink)  
Antiguo 12/06/2009, 02:28
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Macro para pasar una fecha a Excel

Bueno pero es que estas funciones que he puesto yo creo que ya funcionan. Lo que necesitaba sobre todo era ponerlas en un macro.
La cuestión es que si pongo estas funciones en un fichero macros.h y luego pongo #include <macros.h> en los ficheros en los que lo puedo necesitar, me aparece un warning en cada uno de los ficheros en los que no utilizo las funciones. Sin embargo el warning no aparece cuando pongo una macro.
¿Existe alguna forma de evitar esto?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.