Generar columnas calculadas con Excel y OLEDB

En esta segunda y última parte vamos a ver cómo generar columnas calculadas a un DataGridView con la información contenida en nuestro libro de Excel.

Diseño de interfaz

  • Agregamos un botón en la pestaña 2 para la suma con el evento clic:
    • Text: Realizar suma
    • Name: Btnsuma
  • Añadimos un segundo botón para realizar una división con el evento clic:
    • Text: Realizar división
    • Name: Btndivision

Code Time

Evento clic del botón suma:

  • Para agregar una columna nueva al DataGridView es necesario agregar la siguiente línea de código, dónde el primer juego de comillas es el nombre interno y el segundo el nombre visible de la columna.
    • Columns.Add(“Suma”, “Sumatoria”);

Ahora bien, recuerda que para poder hacer operaciones con el libro es necesario recorrer tanto filas como columnas, es decir, recorrer todo el contenido del libro en forma vertical (i) como horizontal (j).

excelp10

En código esto se traduce en:

for (int i = 0; i < dataGridView1.Rows.Count; ++i) //Recorre las filas

{

for (int j = 0; j < dataGridView1.Columns.Count; j++) //Recorre las columnas

{

}

}

  • Para realizar la suma, declaramos justo después de Columns.Add una variable de tipo entero llamada “sum” y la igualamos a 0.

int sum = 0;

  • Ahora para poder realizar la suma de toda la columna pondremos dentro del for j, la siguiente instrucción, la cual recorrerá toda la fila sumando los valores que contengan las columnas involucradas.

sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);

  • Para agregar el resultado en la columna que acabamos de crear es necesario agregar en el for i, lo siguiente

this.dataGridView1[3, i].Value = sum;

En mi caso la nueva columna la he agregado en la columna 3, (toma en cuenta que el número de columnas inicia en 0 no en 1).

  • OJO: Debes de regresar a 0 el valor que tenga suma si lo que quieres es obtener sólo el valor de la columna, ya que, de lo contrario te irá sumando todas las filas y columnas.

sum = 0;

  • Corremos nuestro sistemita y damos clic en el botón de suma, si todo marcha bien, obtendremos los siguientes resultados.

excelp11

Evento división

Ahora bien, que pasa cuando de todo el libro sólo queremos usar ciertas columnas…

  • Creamos una nueva columna dentro del evento Btndivicion_Click

dataGridView1.Columns.Add(“Division”, “División”);

  • Declaramos 3 variables tipo double e igualamos a 0, estas contendrán el resultado de la división, otra para el dividendo y por último el divisor:

double valor1 = 0, valor2 = 0, resultado=0;

  • Cómo usaremos ciertas columnas fijas, no es necesario implementar 2 ciclos for como en el caso de la suma, basta con implementar el ciclo vertical para el recorrido de las filas.

for (int i = 0; i < dataGridView1.Rows.Count; i++)

{

}

  • Dentro del ciclo vamos asignar los valores al dividendo y al divisor, para esta operación usare las columnas 1 y 2 (recuerda que el número de columnas inicia en 0 no en 1).

valor1 = Convert.ToDouble(dataGridView1.Rows[i].Cells[1].Value);

valor2 = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);

  • Ahora sí, haremos la división, asignando el resultado a la variable resultado.

resultado = valor1 / valor2;

  • Y por último vamos a mostrar el resultado de la operación en el DataGridView, en mi caso lo quiero mostrar justo después de la columna de suma, es decir, columna 4.

this.dataGridView1[4, i].Value = resultado;

Corremos nuestro sistemita y veremos los siguientes resultados.

excelp12

Código completo

private void Btnsuma_Click(object sender, EventArgs e)

{

dataGridView1.Columns.Add(“Suma”, “Sumatoria”);

int sum = 0;

 

for (int i = 0; i < dataGridView1.Rows.Count; ++i)

{

 

for (int j = 0; j < dataGridView1.Columns.Count; j++)

{

sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);

}

this.dataGridView1[3, i].Value = sum;

sum = 0;

}

 

}

 

private void Btndivicion_Click(object sender, EventArgs e)

{

dataGridView1.Columns.Add(“Division”, “División”);

 

double valor1 = 0, valor2 = 0, resultado=0;

for (int i = 0; i < dataGridView1.Rows.Count-1; i++)

{

valor1 = Convert.ToDouble(dataGridView1.Rows[i].Cells[1].Value);

valor2 = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);

 

resultado = valor1 / valor2;

 

this.dataGridView1[4, i].Value = resultado;

}

}

Descarga el código completo

 

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s