none
¿Como Utilizar Función "Pago" de Excel en C#? RRS feed

  • Pregunta

  • Amigos

    Necesito programar un formulario que calcule un préstamo a "X" cantidad de tiempo (periodos) a una taza de interés dada.

    ¿Se podrá utilizar la función "pago" propia de Excel dentro de mi Formulario?, ¿Alguna forma de hacerlo o sugerencia de como puedo solucionar esto?

    Agradecería cualquier ayuda 

    lunes, 12 de febrero de 2018 12:58

Respuestas

  • Hola

    Pero, para qué utilizar excel? si lo puedes programar con C#, lo ideal es tener tus tazas por periodos en una base de datos. Asimismo, tener una tabla préstamos en donde guardes el historial de ello

    decimal taza = 3;
    int cantidadtiempo = 2;
    decimal prestamo= 0;
    
    public decimal prestamo(decimal taza, int cantidadtiempo)
    {
    //haces tus operaciones, por ejemplo
    prestamo = taza * cantidadtiempo;
    return prestamo;
    }

    Es la idea de los cálculos que tendrías que realizar, solo es tener claro tus valores y como es que se calculan entre ellos.

    Saludos


    Brayan De la Cruz
    Lima - Perú

    lunes, 12 de febrero de 2018 14:16
  • Te dejo lo que hice para actualizar cuotas de viviendas. Adaptalo a tus necesidades.

     private void btnCalcularCuota_Click(object sender, EventArgs e)
        {
          txtTotIntereses.Text = "";
          txtCuota.Text = "";
          try
          {
            double m = double.Parse(txtMonto.Text);
            int p = int.Parse(txtPeriodos.Text);
            double t = double.Parse(txtTaza.Text);
            List<Cuota> cuotas = GetListaCuotas(m, p, t);
            grCuotas.DataSource = null;
            grCuotas.DataSource = cuotas;
          }
          catch(Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
        }
    
    
        private List<Cuota> GetListaCuotas(double monto, int periodos, double taza)
        {
          List<Cuota> cuotras = new List<Cuota>();
          double suma=0;
          Cuota c=null;
    
          for (int i = 1; i <= periodos; i++)
          {
            c = new Cuota(i, monto, periodos, i, taza);
            cuotras.Add(c);
            suma += c.Interes;
          }
    
          double ga = 0f;
          double SegVida = 0.000615 * monto;  //0.615 por mil
          double SegIncendio = 0.000035 * monto; //0.035 por mil
          double Seg = SegVida + SegIncendio;
          double.TryParse(txtGAdm.Text, out ga);
    
          txtSeguroDeVida.Text = SegVida.ToString("0.00");
          txtSeguroDeIncendio.Text = SegIncendio.ToString("0.00");
          txtTotIntereses.Text = suma.ToString("0.00");
          txtCuota.Text = (c.Valor + ga + Seg).ToString("0.00");
          CargarCuotasPredeterminadas(monto, periodos, ga, Seg);
          return cuotras;
        }
    
    
    
      public class Cuota
      {
    
        /*  PV (1+RATE)^NPER + PMT [{(1+RATE)^NPER - 1}/RATE]  + FV = 0
            he equation used is as follows
            PV (1+RATE)^NPER + PMT (1 + RATE * TYPE ) [{(1+RATE)^NPER - 1}/RATE]  + FV = 0
    
            TYPE is 0 for an ordinary annuity where payments are made or are due at the end of period (loan payments)
    
            TYPE is 1 for an annuity due where payments are made or are due at the start of period (rent payments)
    
            So by manipulating the equation you can write PMT function with code such as
    
            PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1)*(1+RATE*TYPE)); */
    
    #region Cosntructores
    
        public Cuota(double monto, int mesesPlazo, double taza)
        {
          this.Nro = 1;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza);
          this.amortizacion = totalAmortizado;
          this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza);
        }
    
        public Cuota(int nro, double monto, int mesesPlazo, double taza)
        {
          this.Nro = nro;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza);
          this.amortizacion = totalAmortizado;
          this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza);
        }
    
        public Cuota(int nro, double monto, int mesesPlazo, int periodoActual, double taza)
        {
          this.Nro = nro;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, periodoActual, taza);
          this.amortizacion = CalcularAmortizacion(monto, mesesPlazo, periodoActual, taza);
          this.saldo = CalcularSaldo(monto, mesesPlazo, periodoActual, taza);
        }
    
    #endregion Cosntructores
    
    #region Propiedades
    
        public int Nro { get; set; }
    
        private double valor;
        public double Valor 
        {
          get { return valor; }
        }
    
        private double amortizacion;
        public double Amortizacion
        {
          get { return amortizacion; }
        }
    
        public double Interes
        {
          get { return valor - amortizacion; }
        }
    
        private double totalAmortizado;
        public double TotalAmortizado
        {
          get { return totalAmortizado; }
        }
    
        private double saldo;
        public double Saldo
        {
          get { return saldo; }
        }
    
    #endregion Propiedades
    
    
    #region Metodos Privados
    
        private double CalcularCuota(double monto, int mesesPlazo, double taza)
        {      //PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1));//double Monto = 100000;      int Plazos = 60;      double taza = 0.02;
          double t = taza / 1200;
          double b = Math.Pow((1 + t), mesesPlazo);
          return t * monto * b / (b - 1);
        }
    
        private double CalcularAmortizacion(double monto, int mesesPlazo, int periodo, double taza)
        {
          double totAmortAnterior=0;
          if (periodo > 1)
            totAmortAnterior = CalcularTotalAmortizado(monto, mesesPlazo, periodo - 1, taza);
    
          return TotalAmortizado - totAmortAnterior;
        }
    
        private double CalcularTotalAmortizado(double monto, int n, int p, double taza)
        {
          double t = taza / 1200;
          double b = Math.Pow((1 + t), n);
          double c = Math.Pow((1 + t), p);
          return monto * ((c - 1) / (b - 1));
        }
    
        private double CalcularSaldo(double monto, int mesesPlazo, int periodo, double taza)
        {
          double t = taza / 1200;
          double b = Math.Pow((1 + t), mesesPlazo);
          double c = Math.Pow((1 + t), periodo);
          return monto * (1-((c - 1) / (b - 1)));
        }
    
    
    #endregion Metodos Privados
    
      }
    
    

    martes, 13 de febrero de 2018 1:27

Todas las respuestas

  • Hola

    Pero, para qué utilizar excel? si lo puedes programar con C#, lo ideal es tener tus tazas por periodos en una base de datos. Asimismo, tener una tabla préstamos en donde guardes el historial de ello

    decimal taza = 3;
    int cantidadtiempo = 2;
    decimal prestamo= 0;
    
    public decimal prestamo(decimal taza, int cantidadtiempo)
    {
    //haces tus operaciones, por ejemplo
    prestamo = taza * cantidadtiempo;
    return prestamo;
    }

    Es la idea de los cálculos que tendrías que realizar, solo es tener claro tus valores y como es que se calculan entre ellos.

    Saludos


    Brayan De la Cruz
    Lima - Perú

    lunes, 12 de febrero de 2018 14:16
  • hola

    creo que te podria ser de ayuda lo que pubican aca

    o en codeproject

    como usar la funcion pago en office en español

    y el codigo podria ser así:

    using Microsoft.Office.Interop.Excel;// referencia la libreria
    static void Main(string[] args)
    {
    
         Application a = new Application();
         double x = a.WorksheetFunction.PAGO(celdaAcalcular/12;CeldaCalculo;CeldaCalculo2);// llama la hoja de calculo y la funcion
         Console.WriteLine("Pago= {0}", x);
    
    }

    lunes, 12 de febrero de 2018 16:01
  • Lo que necesito es la formula de Pago... si la tuviera no seria problema programarla, y no encontré mucho en internet para ser honesto 
    lunes, 12 de febrero de 2018 21:37
  • Te dejo lo que hice para actualizar cuotas de viviendas. Adaptalo a tus necesidades.

     private void btnCalcularCuota_Click(object sender, EventArgs e)
        {
          txtTotIntereses.Text = "";
          txtCuota.Text = "";
          try
          {
            double m = double.Parse(txtMonto.Text);
            int p = int.Parse(txtPeriodos.Text);
            double t = double.Parse(txtTaza.Text);
            List<Cuota> cuotas = GetListaCuotas(m, p, t);
            grCuotas.DataSource = null;
            grCuotas.DataSource = cuotas;
          }
          catch(Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
        }
    
    
        private List<Cuota> GetListaCuotas(double monto, int periodos, double taza)
        {
          List<Cuota> cuotras = new List<Cuota>();
          double suma=0;
          Cuota c=null;
    
          for (int i = 1; i <= periodos; i++)
          {
            c = new Cuota(i, monto, periodos, i, taza);
            cuotras.Add(c);
            suma += c.Interes;
          }
    
          double ga = 0f;
          double SegVida = 0.000615 * monto;  //0.615 por mil
          double SegIncendio = 0.000035 * monto; //0.035 por mil
          double Seg = SegVida + SegIncendio;
          double.TryParse(txtGAdm.Text, out ga);
    
          txtSeguroDeVida.Text = SegVida.ToString("0.00");
          txtSeguroDeIncendio.Text = SegIncendio.ToString("0.00");
          txtTotIntereses.Text = suma.ToString("0.00");
          txtCuota.Text = (c.Valor + ga + Seg).ToString("0.00");
          CargarCuotasPredeterminadas(monto, periodos, ga, Seg);
          return cuotras;
        }
    
    
    
      public class Cuota
      {
    
        /*  PV (1+RATE)^NPER + PMT [{(1+RATE)^NPER - 1}/RATE]  + FV = 0
            he equation used is as follows
            PV (1+RATE)^NPER + PMT (1 + RATE * TYPE ) [{(1+RATE)^NPER - 1}/RATE]  + FV = 0
    
            TYPE is 0 for an ordinary annuity where payments are made or are due at the end of period (loan payments)
    
            TYPE is 1 for an annuity due where payments are made or are due at the start of period (rent payments)
    
            So by manipulating the equation you can write PMT function with code such as
    
            PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1)*(1+RATE*TYPE)); */
    
    #region Cosntructores
    
        public Cuota(double monto, int mesesPlazo, double taza)
        {
          this.Nro = 1;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza);
          this.amortizacion = totalAmortizado;
          this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza);
        }
    
        public Cuota(int nro, double monto, int mesesPlazo, double taza)
        {
          this.Nro = nro;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza);
          this.amortizacion = totalAmortizado;
          this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza);
        }
    
        public Cuota(int nro, double monto, int mesesPlazo, int periodoActual, double taza)
        {
          this.Nro = nro;
          this.valor = CalcularCuota(monto, mesesPlazo, taza);
          this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, periodoActual, taza);
          this.amortizacion = CalcularAmortizacion(monto, mesesPlazo, periodoActual, taza);
          this.saldo = CalcularSaldo(monto, mesesPlazo, periodoActual, taza);
        }
    
    #endregion Cosntructores
    
    #region Propiedades
    
        public int Nro { get; set; }
    
        private double valor;
        public double Valor 
        {
          get { return valor; }
        }
    
        private double amortizacion;
        public double Amortizacion
        {
          get { return amortizacion; }
        }
    
        public double Interes
        {
          get { return valor - amortizacion; }
        }
    
        private double totalAmortizado;
        public double TotalAmortizado
        {
          get { return totalAmortizado; }
        }
    
        private double saldo;
        public double Saldo
        {
          get { return saldo; }
        }
    
    #endregion Propiedades
    
    
    #region Metodos Privados
    
        private double CalcularCuota(double monto, int mesesPlazo, double taza)
        {      //PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1));//double Monto = 100000;      int Plazos = 60;      double taza = 0.02;
          double t = taza / 1200;
          double b = Math.Pow((1 + t), mesesPlazo);
          return t * monto * b / (b - 1);
        }
    
        private double CalcularAmortizacion(double monto, int mesesPlazo, int periodo, double taza)
        {
          double totAmortAnterior=0;
          if (periodo > 1)
            totAmortAnterior = CalcularTotalAmortizado(monto, mesesPlazo, periodo - 1, taza);
    
          return TotalAmortizado - totAmortAnterior;
        }
    
        private double CalcularTotalAmortizado(double monto, int n, int p, double taza)
        {
          double t = taza / 1200;
          double b = Math.Pow((1 + t), n);
          double c = Math.Pow((1 + t), p);
          return monto * ((c - 1) / (b - 1));
        }
    
        private double CalcularSaldo(double monto, int mesesPlazo, int periodo, double taza)
        {
          double t = taza / 1200;
          double b = Math.Pow((1 + t), mesesPlazo);
          double c = Math.Pow((1 + t), periodo);
          return monto * (1-((c - 1) / (b - 1)));
        }
    
    
    #endregion Metodos Privados
    
      }
    
    

    martes, 13 de febrero de 2018 1:27