Trabajar con Excel y OLEDB en Windows Forms

how-to-create-graph-chart-excel_thumb800

Trabajar con libros de Excel en el ámbito probabilístico o matemático es para muchos, su día a día, pero para quienes deben realizar los mismos cálculos continuamente en más de un libro de Excel se convierte ciertamente en una actividad muy aburrida o monótona, entonces que le parecería generar su propio software para subir los libros de Excel y que con un sólo clic pueda usted realizar todos los cálculos necesarios sin necesidad de tener un manejador de base de datos como SQL Server.

El objetivo de este tutorial es permitir a quienes deseen generar su propia herramienta de trabajo sin necesidad de tener grandes conocimientos de programación y por, sobre todo, sin depender de un manejador de base de datos.

Requisitos:

  • Visual Studio 2012, 2013 o 2015 en cualquiera de sus versiones.
  • Contar con el Access Database Engine instalado.
  • Un libro de Excel de prueba.

Cómo es un tutorial algo extenso, he decidido dividirlo en 2 partes.

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

 

 

Leer libros de Excel sin un manejador de base de datos

En esta primera parte vamos a ver cómo incorporar información de un libro de Excel a nuestro Windows Form, al igual de obtener el nombre del libro, extensión y mostrar su contenido en un DataGridView.

El objetivo de este tutorial es permitir a quienes deseen generar su propia herramienta de trabajo sin necesidad de tener grandes conocimientos de programación y por, sobre todo, sin depender de un manejador de base de datos.

Requisitos:

  • Visual Studio 2012, 2013 o 2015 en cualquiera de sus versiones.
  • Contar con el Access Database Engine instalado.
  • Un libro de Excel de prueba.

 

Creamos un nuevo proyecto en Visual Studio, en mi caso VS12 Professional

  1. Nuevo proyecto
  2. Windows Form Application
  3. Damos un nombre al proyecto
  4. Damos clic en guardar

excelp1

Creamos un diseño base para nuestro software

  1. Tomamos de la esquina inferior de nuestro form y jalamos hacia afuera para hacer de este más grande.
  2. Agregamos un OpenFileDialog de nuestra caja de herramientas
    1. En nuestra caja de herramientas o toolbox, teclea “file” o “file” para filtrar los controles.
    2. En la sección All Windows Forms toma el control OpenFileDialog y arrastra hacia el recuadro gris y suelta el control. Te aparecerá de la siguiente manera.
    3. Ahora, selecciona el control, da clic en el trueno de la sección propiedades y en dónde dice “FileOk” da doble clic para generar un evento.

excelp3

3. Añade un TapControl

  1. De la caja de herramientas busca “tap”
  2. En los resultados te saldrá el control “TapControl”, mismo que debes arrastrar hacie el recuadro gris, suelta el control, toma de la esquina inferior y jala hacia atrás para hacer de este mucho más grande.

excelp4

Para que el software se vea más organizado usaremos la primera pestaña para subir nuestro libro de Excel y la segunda pestaña para realizar los cálculos pertinentes.

Subiendo nuestro libro de Excel

Diseño de interfaz

  • Agrega un botón con el texto “Subir archivo”
    1. Name: Btnsubir
    2. Text: Subir archivo
  • Añade un checkBox el cual será el que nos indicará si la primera fila que contiene nuestra tabla del libro de Excel, contiene el nombre de la columna.
    1. Name: rbHeaderYes
    2. Text: Si
  • Para esta ocasión vamos agregar 3 labels
    1. Label para conocer el nombre del archivo (Name: lblnombre)
    2. Label para conocer la extención del archivo (Name: lblextension)
    3. Label para conocer el estatus (Name: lblestatus)

excelp5

  • Añadimos al botón el evento clic
    1. Seleccionamos el botón
    2. Damos clic en el trueno que aparece en el panel de propiedades
    3. Dónde dice clic, damos doble clic en el espacio en blanco para que se nos auto genere el evento, una vez generado el evento, nos re direccionará a Form1.cs

excelp6

Code Time

En este ejemplo veremos cómo preparar nuestro software para que pueda ser utilizado con casi cualquier versión de Excel ya sea con la extensión .xls o .xlsx, para ello realizamos la conexión Excel usando OLEDB de la siguiente manera.

  • En la ventaja Form1.cs agregamos dos variables:
    1. private string Excel03ConString = “Provider=Microsoft.Jet.OLEDB.8.0;Data Source={0};Extended Properties=’Excel 8.0;HDR={1}'”;
    2. private string Excel07ConString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=’Excel 12.0;HDR={1}'”;
  • En el evento clic del botón agrega dentro de las llaves: ShowDialog();
  • En la parte superior de nuestro Forms1.cs agregamos las siguientes librerías para evitar errores.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.OleDb;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

  • En el evento openFileDialog1_FileOk declaramos las siguientes variables
    1. string archivo = openFileDialog1.FileName; (la cual nos permitirá conocer los datos del libro en el que se trabajará)
    2. string extension = Path.GetExtension(archivo); (Nos dará la extensión del libro)
    3. string cabecera = rbHeaderYes.Checked ? “YES” : “NO”; (Nos indicará si la primer fila del libro contiene el nombre de la columna)
    4. string conStr, sheetName;
    5. DataTable dt = new DataTable(); (Creamos una tabla relacional en memoria)
    6. conStr = string.Empty; (Le asignamos un valor a la variable conStr)
  • Después verificamos que tipo de extensión tiene el libro (.xls o .xlsx) de la siguiente manera.

switch (extension)

{

 

case “.xls”: //Excel 97-03

conStr = string.Format(Excel03ConString, archivo, cabecera);

break;

 

case “.xlsx”: //Excel 07

conStr = string.Format(Excel07ConString, archivo, cabecera);

break;

}

  • Obtenemos el nombre de la primera pestaña del libro de Excel que será con la que vamos a trabajar.

using (OleDbConnection con = new OleDbConnection(conStr))

{

using (OleDbCommand cmd = new OleDbCommand())

{

cmd.Connection = con;

con.Open();

DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

sheetName = dtExcelSchema.Rows[0][“TABLE_NAME”].ToString();

con.Close();

}

}

  • Asignamos el nombre del libro y la extensión a sus respectivos labels

lblnombre.Text = sheetName;

lblextension.Text = extension;

  • Leemos los datos de la primera pestaña del libro de Excel

using (OleDbConnection con = new OleDbConnection(conStr))

{

using (OleDbCommand cmd = new OleDbCommand())

{

using (OleDbDataAdapter oda = new OleDbDataAdapter())

{

cmd.CommandText = “SELECT * From [” + sheetName + “]”;

 

cmd.Connection = con;

con.Open();

oda.SelectCommand = cmd;

oda.Fill(dt);

con.Close();

 

}

}

}

Ahora bien, ya sabemos que extensión es la del libro, su nombre y ya leímos su contenido, pero nos falta dónde vamos a ver la información contenida en dicho libro, para ello nos vamos al diseño y damos clic en la pestaña 2.

  • De nuestra barra de herramientas buscamos DataGridView, arrastramos y soltamos en nuestra interfaz.
    1. Name: dataGridView1

excelp7

  • Para poder ver la información de nuestro libro de Excel, nos regresamos a Form1.cs y justo después de con.Close(); agregamos la siguiente línea de código.

dataGridView1.DataSource = dt;

  • Para culminar con esta sección enseguida de la línea de código del paso 10, añadimos el estatus:

lblestatus.Text = “Archivo agregado con éxito”;

 Y listo hemos terminado la primera sección, ahora sí corremos nuestro sistemita y obtendremos los siguientes resultados

El pase de diapositivas requiere JavaScript.

Código completo

private string Excel03ConString = “Provider=Microsoft.Jet.OLEDB.8.0;Data Source={0};Extended Properties=’Excel 8.0;HDR={1}'”;
private string Excel07ConString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=’Excel 12.0;HDR={1}'”;

public Form1()
{
InitializeComponent();
}

private void Btnsubir_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}

private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
try
{
string archivo = openFileDialog1.FileName;
string extension = Path.GetExtension(archivo);
string cabecera = rbHeaderYes.Checked ? “YES” : “NO”;
string conStr, sheetName;
DataTable dt = new DataTable();
conStr = string.Empty;
switch (extension)
{

case “.xls”: //Excel 97-03
conStr = string.Format(Excel03ConString, archivo, cabecera);
break;

case “.xlsx”: //Excel 07
conStr = string.Format(Excel07ConString, archivo, cabecera);
break;
}

//Obteniendo el nombre de la primer fila.
using (OleDbConnection con = new OleDbConnection(conStr))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
con.Open();
DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
sheetName = dtExcelSchema.Rows[0][“TABLE_NAME”].ToString();
con.Close();
}
}
lblnombre.Text = sheetName;
lblextension.Text = extension;

//Leyedo la información de la primer pestaña.
using (OleDbConnection con = new OleDbConnection(conStr))
{
using (OleDbCommand cmd = new OleDbCommand())
{
using (OleDbDataAdapter oda = new OleDbDataAdapter())
{
cmd.CommandText = “SELECT * From [” + sheetName + “]”;

cmd.Connection = con;
con.Open();
oda.SelectCommand = cmd;
oda.Fill(dt);
con.Close();
dataGridView1.DataSource = dt;

lblestatus.Text = “Archivo agregado con éxito”;
}
}
}
}
catch (Exception ex)
{
lblestatus.Text = “Error, ” + ex.ToString();
}
}

Descargar proyecto

Introducción aplicaciones universales (UWP)

UWP1

Una aplicación de Windows universal o UWP por sus siglas en inglés, es una aplicación que puede ejecutarse en cualquier dispositivo Windows que va desde cualquier dispositivo lumia con Windows 10 mobile hasta tablets o Pc con Windows 10 en cualquiera de sus versiones.

Para los desarrolladores este tipo de aplicaciones significan un ahorro de tiempo ya que con un solo código la aplicación puede estar disponible para todo el mercado Windows y a los consumidores les permite disponer de una misma aplicación para todos sus dispositivos sin preocuparse de sí estará o no disponible en el equipo al que deseen instalarla.

¿Cómo funcionan las UWP?

Una de las innovaciones que trae consigo las aplicaciones UWP es la implementación de un algoritmo de escala que toma en cuenta la distancia de la visión y la densidad de la pantalla (píxeles por pulgada) es posible la adaptación del tamaño de los controles, las fuentes y otros elementos de interfaz de usuario de modo que sean legibles en todos los dispositivos.

UWP2

Visual Studio 2015 incorpora controles que están diseñados para poder adaptarse a cualquier tamaño de pantalla sin afectar el diseño de nuestra aplicación; también es posible el soporte a la integración de multilenguaje que permitirán expandir a un más el mercado de nuestras aplicaciones, incluye también soporte a la lectura RTL, un dato importante es el soporte al modo de alto contraste por lo que si el equipo en el que está siendo usada nuestra aplicación cuenta con esta opción activada se mostrará el diseño correctamente y sin problemas.

 

Publicación basada en: Introduction to UWP app design

Actualiza el SDK de Kinect para que sea 100% compatible con aplicaciones de Windows 10

Antes de iniciar con la actualización, asegúrese de tener el sensor Kinect para Windows 2 conectado al ordenador.

Para asegurarnos que todo esté funcionando correctamente descargaremos e instalaremos el siguiente software Configuración de verificador de Kinect

Si todo funciona como debería, al abrir el verificador de configuraciones tendremos algo parecido a esto:

Una vez que estemos seguros de que todo esté funcionando correctamente abre el administrador de dispositivos (win + x) y después da clic en la letra m para abrir la siguiente ventana.

Despliega la sección Kinect sensor devices y da clic derecho en WPF KinectSensor Interface 0.

2

Da clic en Actualizar software de controlador…

3

Y por último da clic en Buscar automáticamente software de controlador actualizado.

4

Y listo una vez que tengamos instalada la nueva versión del SDK podremos empezar a desarrollar aplicaciones con Kinect para Windows 2  en Visual Studio 2015.

La vuelta al mundo en minutos con Kinect para Windows 2

En su novela, La vuelta al mundo en ochenta días, de Julio Verne celebra las maravillas tecnológicas DEL SIGLO XIX: los ferrocarriles, barcos de vapor, el Canal de Suez, que hizo posible la vuelta al mundo en menos de tres meses. Esta primavera y el verano, el Museo de la Comunicación en Frankfurt, Alemania, está honrando el cuento clásico de Verne en una exposición titulada “La vuelta al mundo en 80 Objetos, Código Verne Jules” Entre los objetos que capturan mucho la atención es un mapa del mundo interactivo manejable a través de Kinect, que permite a los visitantes del museo a utilizar gestos intuitivos para desplazarse, hacer zoom, y cambiar entre diferentes mapas y trazar puntos de vista, permitiendo realizar su propio viaje alrededor del mundo.

Creado por Aleksandr Shirokov-un estudiante graduado en el Instituto de Geomática de la Universidad de Münster-el mapa digital interactiva se muestra en una pantalla de 1,75 metros por 2,10 metros (aproximadamente 6 pies por 7 pies). Los visitantes del museo pueden encuadrar los mapas moviendo una mano. Pueden acercar y alejar mediante el uso de los gestos familiares para usuarios con smartphones, excepto que utilizan las dos manos en lugar de su dedo pulgar y el dedo índice. También pueden utilizar una única una mano gesto que pasa detrás de una oreja a cambiar la perspectiva y para ver diferentes tipos de mapas.

Los visitantes del museo pueden rodear el mundo, como Phileas Fogg, el héroe de la novela de Verne, pero en cuestión de segundos en lugar de semanas. O pueden centrarse en un lugar determinado, hasta el punto de hacer zoom sobre su propia residencia con sólo usar gestos simples que Kinect para Windows capta e interpreta. Los usuarios se sienten atraídos por la riqueza del mapa de información y por la sencillez de la navegación de sus muchos puntos de vista. “Eso fue increíble,” entusiasmado de un reciente visitante del museo. “Nunca me puse a pensar en lo fácil y natural sería para controlar algo con mis manos.”

La primera iteración del mapa interactivo utiliza el sensor original de Kinect para capturar los gestos de los usuarios. Después de que el sensor de Kinect v2 estuvo disponible, los desarrolladores estaban ansiosos de tomar ventaja de su cámara de mayor resolución y seguimiento cuerpo más detallada. Esta mejora permitió el reconocimiento mucho más precisa de los gestos de los usuarios, permitiendo controlar el mapa con más naturalidad y sin problemas. “Ni siquiera tenemos que explicar a la gente qué hacer. Ellos, naturalmente, comienzan a desplazarse, cambiando, y el zoom del mapa “, señala un empleado del museo. Y puesto que el último sensor Kinect puede “ver”, incluso en una habitación completamente a oscuras, la nueva versión de la aplicación puede rastrear con precisión las articulaciones y el cuerpo de los usuarios, por tanto, sus gestos, incluso si las luces son tenues.

Después de Frankfurt, la exposición está programada para ser exhibida en el Museo de la Comunicación de Berlín, donde su mapa interactivo debería participar y deleitar a todo un nuevo grupo de trotamundos virtuales. Mientras tanto, desarrollador Shirokov planea usar Kinect para ‘capacidad para detectar el ritmo cardíaco y expresiones faciales para medir la respuesta emocional a la experiencia interactiva y luego mejorar la aplicación en consecuencia.

Publicación Original

Aplicaciones para Windows Phone

Nombre: Mi Embarazo

Descripción:

¿Estas embarazada  y necesitas llevar el control de tu embarazo de una manera fácil, rápida, segura, eficiente, que te mantenga en constante comunicación con tu médico de cabecera y que en caso de alguna emergencia alerte a tus familiares?

Sí respondiste “Si” está aplicación es para ti.

  • Mi Embarazo es la única aplicación abalada por sector salud en Tamaulipas en su sección síntomas en la cual podrás saber si tu síntoma presentado es catalogado como normal o si es necesario que te revise el médico, si es así, se te notificará y se te pedirá autorización para alertarle de lo acontecido, si todo marcha bien, también cuenta con la sección de Expediente el cuál te permitirá respaldar todos tus síntomas y mostrarlos gráficamente para un mejor seguimiento del tiempo de gestación.
  • Cuenta con un botón de pánico, el cuál alertará a 3 familiares y al médico en caso de tener una emergencia.
  • También está aplicación cuenta con una sección destinada a los recordatorios de citas médicas y medicamentos para que jamás los olvides.
  • Sección de Diario Personal y Clínico con los cuales podrás guardar todos tus sentimientos y llegado el momento respaldarlos y a futuro enseñarlos a tu bebé o presérvalos como un bonito recuerdo.
  • Porque las mujeres queremos estar siempre informadas de todo el proceso de gestación integramos en la sección “Extras” las páginas más visitadas y que son administradas por doctores especialistas y la calculadora de posible fecha de día de parto para que estés preparada.
  • Opción a OneDrive como respaldo de información.

Nombre: Encuéntralo

Descripción:

Sí eres como yo que dejas olvidadas las cosas y luego ya no las encuentras esta aplicación será tu mejor aliada en esos momentos.

Con Encuéntralo podrás guardar la ubicación de todas las cosas que sean indispensables para tu vida cotidiana desde llaves, el coche en el súper mercado o la dirección de alguna persona, solo guarda el nombre del objeto y listo, después cuando lo necesites podrás acceder a esa ubicación y no solo eso, también podrás obtener el camino para llegar, ya sea caminando o manejando, ¡Tú eliges!

Nombre: Diario Personal

Descripción:

Es la aplicación perfecta para quienes buscan donde guardar sus secretos y vivencias de una manera fácil, rápida, segura y que además buscan tener una aplicación acorde a su estado de ánimo, género o simplemente un gusto.

Diario Personal cuenta con:

  • Múltiples temas que hacen de ella la compañera perfecta para hombre y mujeres.
  • Uso de Usuario y Contraseña
  • Filtro por mes de cada vivencia con capacidad de edición y eliminación de cada una.
  • Soporte de OneDrive para respaldo de información.

Nombre: Mi Diario Personal

Descripción:

Sí lo que buscas es un diario personal lindo, tierno y que además sea seguro, Mi Diario Personal es para ti.

Un diario seguro, con una interfaz linda, tierna que te permita expresar todos tus sentimientos y que además tenga un filtrado por mes para una mayor organización del contenido.