jueves, 5 de noviembre de 2015

ReportViewer y Rdlc, ejemplo Factura- Eviar Imagen

 

El envió de imágenes a un reporte Local o remoto siempre es muy necesario, en muchas ocasiones se requieren para hacer un reporte personalizado utilizando el logo de la empresa, firma digital, etc. o simplemente para embellecer nuestros reportes “recordando que una imagen vale mal que mil palabras”

En este articulo aprovecharemos un proyecto anterior que ya tenemos creado y creo que la mayoría de ustedes ya analizo  y puso en practica los conceptos ahí mencionados para mostrar como enviar una imagen a un Local Report, si aun no tiene el proyecto anterior o tiene dudas sobre como crear un reporte local por favor antes de continuar sírvase a revisar el articulo abajo mencionado:

ReportViewer y Rdlc, ejemplo Factura (Base de datos)

Extenderemos el proyecto insertando un objeto Imagen al Report1.rdlc y enviándole un arreglo de Bytes desde el formulario principal dicho arreglo contendrá los bytes de archivo tipo *.png

Antes de comenzar a leer este articulo recuerde que: “El objetivo no es otro mas que el de orientar a los Parvulos .Net sobre como Utilizar el control Imagen de un Local Report, todo lo escrito en este articulo no es ensayado y no es revisado por nadie mas, por lo cual podría contener errores gramaticales y sintácticos, el articulo y sus conceptos no pretenden ser la verdad absoluta del tema, siéntase en confianza de dejar sus comentarios y opiniones en la sección de comentarios al final del mismo y si lo considera prudente envíeme un correo electrónico por medio del formulario de contacto y por ultimo si el articulo le es de utilidad por favor considere dejar un comentario de agradecimiento.

Requisitos: Visual Studio 2012, Framework 4.0

1. Para empezar, descargue el proyecto ofrecido en el articulo anterior, ábralo utilizando Vs2012, espere a que termine la conversión del código.

2. Abra el formulario principal llamado Form1

image

3. Cree el siguiente diseño utilizando un PictureBox y un Botón (recuerde que el objetivo del articulo es mostrar como se envía un objeto imagen a un Local Report así que ignore mi escaso sentido del diseño), nombre a los controles como pctboxLogo y btnSeleccionar respectivamente.

image

4. En las propiedades del objeto PictureBox, seleccione StretchImage para que la imagen que seleccione se autoajuste al tamaño de nuestro control.

image

5. Haga doble clic sobre el botón que acabamos de crear a fin de generar la estructura de código del evento Click, dentro coloque las siguientes líneas de código:

private void btnSeleccionar_Click(object sender, EventArgs e)
{
//
//Utilizaremos el la clase OpenFileDialog para seleccionar una imagen
OpenFileDialog fileDialog = new OpenFileDialog();
//
//Definimos los filtros necesarios para evitar ver archivos que no corresponden a archivo de imagen
fileDialog.Filter = "Archivo JPG (*.jpg)|*.jpg| Archivo PNG (*.png)|*.png| Archivo BMP (*.bmp)|*bmp";

if (fileDialog.ShowDialog() == DialogResult.OK)
{
//
//Cargamos nuestro control PictureBox con el archivo de imagen seleccionado
pctboxLogo.Image = Image.FromFile(fileDialog.FileName);
}

Probemos estas líneas de código:


image


Puesto que pudimos cargar una imagen a nuestro PictureBox el código anterior funciona. Continuemos…


Para poder enviar nuestro arreglo de Bytes al Local Report necesitamos crear una nueva propiedad que será la encargada de transportar los Bytes, como el Logo forma parte del Header de la factura, usaremos la clase EFactura, para esto.


6. Desde el “Explorador de Soluciones” haga doble clic sobre la clase EFactura y cree una nueva propiedad llamada Logo la cual será de tipo Bytes[] con acceso publico:

using System;
using System.Collections.Generic;

namespace ReportViewerInvoiceReport_CSharp
{
public class EFactura
{
public int Numero { get; set; }
public string Nombre { get; set; }
public string Rfc { get; set; }
public string Direccion { get; set; }
public decimal Subtotal { get; set; }
public decimal Iva { get; set; }
public decimal Total { get; set; }
public DateTime FechaFacturacion { get; set; }
//
//Propiedad con acceso publico del tipo Byte, será el encargado de transportar los bytes de nuestro imagen
public Byte[] Logo { get; set; }

//Creamos una lista con una nueva Instancia de la clase Articulo
//esta lista contendra el detalle de la factura
public List<EArticulo> Detail = new List<EArticulo>();
}
}

7. Ahora vayamos a configurar nuestro Local Report para recibir esta imagen como parte de los datos que debe de mostrar, para ello, desde el Explorador de Soluciones abra el reporte llamado Report1.rdlc haciendo doble clic sobre el:


image


Tendremos que modificar un poco nuestro  diseño a fin de darle espacio en el Header al control Imagen, que será el encargado de mostrar la imagen que fungirá como logo de la empresa.


8. Modifique el diseño arrastrando los controles hacia abajo hasta que considere prudente.


image


Antes de continuar con nuestro diseño tenemos que actualizar nuestro origen de datos a fin de tener acceso a la propiedad Logo de nuestra clase EFactura, pero antes de eso observe que la propiedad agregada pasos anteriores aun no esta visible y por lo tanto no esta disponible para ser utilizado en nuestro reporte:


image


image


y por mas que hagamos Clic derecho Actualizar no veremos jamás esta propiedad hasta que no hagamos una nueva compilación de nuestro proyecto, así que:


10. Diríjase a la barra de Menús –> Compilar –> Compilar Solución


image


11. Observe como después de la compilación en el cuadro de Origen de Datos podemos visualizar una nueva propiedad llamada Logo:


image


12. Diríjase al cuadro “Datos del informe”- > clic derecho sobre el origen “Encabezado” –> Actualizar y observe que nuestra propiedad se hace presente en este origen de datos.


image


Ahora que tenemos nuestra nueva propiedad como parte del origen de datos de nuestro informe podemos utilizarlo para asignárselo al objeto Imagen.


13. Desde el cuadro de herramientas ubique el control Imagen y arrástrelo al Header de nuestro local report.


image


14. Automáticamente veremos el cuadro de dialogo “Propiedades de la imagen”, ubique la opción “Seleccionar el origen de la imagen” y seleccione “Base de datos”, ubique la opción “Usar este campo:” y seleccione “=First(Fields!Logo.Value, "Encabezado")”, ubique la opción “Usar este tipo MIME:” y seleccione “image/png” (esta ultima opción lo dejo a su consideración no necesariamente tiene que ser este tipo de imagen)


image


15. Haga clic en “Aceptar” y observe como nuestro nuevo control fue agregado al Header de nuestro Local Report, juegue un poco con  el tamaño.


image


Para continuar vayamos a nuestro Form1 a terminar de configurar el envió del arreglo de bytes


16. En la parte superior de nuestra estructura de código, cree el siguiente método que nos ayudara a la transformación de nuestra imagen en un arreglo de bytes.

private byte[] GetBytes(Image imageIn)
{
//
//Usamos la clase MemoryStream para contener los bytes que compone la imagen
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,
ImageFormat.Png);
//
//Retornamos el arreglo de bytes
return ms.ToArray();
}

17. Ubique el método InvoiceGenerate() y agregue las siguiente líneas de código:

//
// Usamos la Función GetBytes() para convertir la imagen cargada al PicureBox en un arreglo de Bytes para establecérselo a nuestra propiedad Logo
_factura.Logo = GetBytes(pctboxLogo.Image);

Después de haber realizado todo lo anterior solo nos resta probar nuestra aplicación.


Ejecute la aplicación presionado la tecla “F5” o desde el menú presione el botón “Iniciar”


image


En el campo “Numero” ingrese cualquier valor del 1 al 5 y presione “Enter”


image


Haga Clic sobre el botón “…” para seleccionar una imagen (yo escogeré una imagen del tipo png)


image


Observe como nuestro PictureBox muestra la imagen seleccionada:


image


Presione el botón “Imprimir” y observe como nuestra imagen es mostrada en nuestro Local Report


imageimage


Repita esta operación con tantas imágenes guste…


Por ultimo recuerde que el origen de la imagen podrías ser un arreglo de bytes almacenado en un campo de una base datos, el resultado siempre será el mismo ya que al Local Report no le interesa ni necesita saber el origen de la imagen siempre y cuando esta venga como un arreglo de Bytes


Escribir este articulo me llevo mas de 3 horas, dejar un comentario de agradecimiento le tomara 5 minutos.


Saludos desde Monterrey, Nuevo León México!


Ejemplo C#
Ejemplo Vb.Net

Nota: Al momento de migrar la aplicación de Vs2010 a Vs2012 recibí este mensaje de advertencia


Advertencia    1    El proyecto hace referencia a una versión anterior de SQL Server Compact que no tiene compatibilidad con el diseñador en la versión actual de Visual Studio. Para continuar sin compatibilidad con el diseñador, descargue SQL Server Compact 3.5 del centro de descarga de Microsoft (http://go.microsoft.com/fwlink/?LinkId=229598). Para actualizar los activos a SQL Server Compact 4.0 y habilitar la compatibilidad con el diseñador, abra el proyecto y use el cuadro de diálogo Agregar conexión para crear una conexión a la base de datos. ReportViewerInvoiceReport-CSharp”


No tuve la necesidad de realizar absolutamente nada para poder trabajar con el proyecto de ejemplo pero si usted lo desea podría actualizar la base de datos a la versión 4.0, el script para crear las estructuras de las tablas la podrá descargar en el link proporcionado en el proyecto anterior.

miércoles, 3 de junio de 2015

ReportViewer y Rdlc, ejemplo Factura- Eviar Imagen

 

El envió de imágenes a un reporte Local o remoto siempre es muy necesario, en muchas ocasiones se requieren para hacer un reporte personalizado utilizando el logo de la empresa, firma digital, etc. o simplemente para embellecer nuestros reportes “recordando que una imagen vale mal que mil palabras”

En este articulo aprovecharemos un proyecto anterior que ya tenemos creado y creo que la mayoría de ustedes ya analizo  y puso en practica los conceptos ahí mencionados para mostrar como enviar una imagen a un Local Report, si aun no tiene el proyecto anterior o tiene dudas sobre como crear un reporte local por favor antes de continuar sírvase a revisar el articulo abajo mencionado:

ReportViewer y Rdlc, ejemplo Factura (Base de datos)

Extenderemos el proyecto insertando un objeto Imagen al Report1.rdlc y enviándole un arreglo de Bytes desde el formulario principal dicho arreglo contendrá los bytes de archivo tipo *.png

Antes de comenzar a leer este articulo recuerde que: “El objetivo no es otro mas que el de orientar a los Parvulos .Net sobre como Utilizar el control Imagen de un Local Report, todo lo escrito en este articulo no es ensayado y no es revisado por nadie mas, por lo cual podría contener errores gramaticales y sintácticos, el articulo y sus conceptos no pretenden ser la verdad absoluta del tema, siéntase en confianza de dejar sus comentarios y opiniones en la sección de comentarios al final del mismo y si lo considera prudente envíeme un correo electrónico por medio del formulario de contacto y por ultimo si el articulo le es de utilidad por favor considere dejar un comentario de agradecimiento.

Requisitos: Visual Studio 2012, Framework 4.0

1. Para empezar, descargue el proyecto ofrecido en el articulo anterior, ábralo utilizando Vs2012, espere a que termine la conversión del código.

2. Abra el formulario principal llamado Form1

image

3. Cree el siguiente diseño utilizando un PictureBox y un Botón (recuerde que el objetivo del articulo es mostrar como se envía un objeto imagen a un Local Report así que ignore mi escaso sentido del diseño), nombre a los controles como pctboxLogo y btnSeleccionar respectivamente.

image

4. En las propiedades del objeto PictureBox, seleccione StretchImage para que la imagen que seleccione se autoajuste al tamaño de nuestro control.

image

5. Haga doble clic sobre el botón que acabamos de crear a fin de generar la estructura de código del evento Click, dentro coloque las siguientes líneas de código:

private void btnSeleccionar_Click(object sender, EventArgs e)
{
//
//Utilizaremos el la clase OpenFileDialog para seleccionar una imagen
OpenFileDialog fileDialog = new OpenFileDialog();
//
//Definimos los filtros necesarios para evitar ver archivos que no corresponden a archivo de imagen
fileDialog.Filter = "Archivo JPG (*.jpg)|*.jpg| Archivo PNG (*.png)|*.png| Archivo BMP (*.bmp)|*bmp";

if (fileDialog.ShowDialog() == DialogResult.OK)
{
//
//Cargamos nuestro control PictureBox con el archivo de imagen seleccionado
pctboxLogo.Image = Image.FromFile(fileDialog.FileName);
}

Probemos estas líneas de código:


image


Puesto que pudimos cargar una imagen a nuestro PictureBox el código anterior funciona. Continuemos…


Para poder enviar nuestro arreglo de Bytes al Local Report necesitamos crear una nueva propiedad que será la encargada de transportar los Bytes, como el Logo forma parte del Header de la factura, usaremos la clase EFactura, para esto.


6. Desde el “Explorador de Soluciones” haga doble clic sobre la clase EFactura y cree una nueva propiedad llamada Logo la cual será de tipo Bytes[] con acceso publico:

using System;
using System.Collections.Generic;

namespace ReportViewerInvoiceReport_CSharp
{
public class EFactura
{
public int Numero { get; set; }
public string Nombre { get; set; }
public string Rfc { get; set; }
public string Direccion { get; set; }
public decimal Subtotal { get; set; }
public decimal Iva { get; set; }
public decimal Total { get; set; }
public DateTime FechaFacturacion { get; set; }
//
//Propiedad con acceso publico del tipo Byte, será el encargado de transportar los bytes de nuestro imagen
public Byte[] Logo { get; set; }

//Creamos una lista con una nueva Instancia de la clase Articulo
//esta lista contendra el detalle de la factura
public List<EArticulo> Detail = new List<EArticulo>();
}
}

7. Ahora vayamos a configurar nuestro Local Report para recibir esta imagen como parte de los datos que debe de mostrar, para ello, desde el Explorador de Soluciones abra el reporte llamado Report1.rdlc haciendo doble clic sobre el:


image


Tendremos que modificar un poco nuestro  diseño a fin de darle espacio en el Header al control Imagen, que será el encargado de mostrar la imagen que fungirá como logo de la empresa.


8. Modifique el diseño arrastrando los controles hacia abajo hasta que considere prudente.


image


Antes de continuar con nuestro diseño tenemos que actualizar nuestro origen de datos a fin de tener acceso a la propiedad Logo de nuestra clase EFactura, pero antes de eso observe que la propiedad agregada pasos anteriores aun no esta visible y por lo tanto no esta disponible para ser utilizado en nuestro reporte:


image


image


y por mas que hagamos Clic derecho Actualizar no veremos jamás esta propiedad hasta que no hagamos una nueva compilación de nuestro proyecto, así que:


10. Diríjase a la barra de Menús –> Compilar –> Compilar Solución


image


11. Observe como después de la compilación en el cuadro de Origen de Datos podemos visualizar una nueva propiedad llamada Logo:


image


12. Diríjase al cuadro “Datos del informe”- > clic derecho sobre el origen “Encabezado” –> Actualizar y observe que nuestra propiedad se hace presente en este origen de datos.


image


Ahora que tenemos nuestra nueva propiedad como parte del origen de datos de nuestro informe podemos utilizarlo para asignárselo al objeto Imagen.


13. Desde el cuadro de herramientas ubique el control Imagen y arrástrelo al Header de nuestro local report.


image


14. Automáticamente veremos el cuadro de dialogo “Propiedades de la imagen”, ubique la opción “Seleccionar el origen de la imagen” y seleccione “Base de datos”, ubique la opción “Usar este campo:” y seleccione “=First(Fields!Logo.Value, "Encabezado")”, ubique la opción “Usar este tipo MIME:” y seleccione “image/png” (esta ultima opción lo dejo a su consideración no necesariamente tiene que ser este tipo de imagen)


image


15. Haga clic en “Aceptar” y observe como nuestro nuevo control fue agregado al Header de nuestro Local Report, juegue un poco con  el tamaño.


image


Para continuar vayamos a nuestro Form1 a terminar de configurar el envió del arreglo de bytes


16. En la parte superior de nuestra estructura de código, cree el siguiente método que nos ayudara a la transformación de nuestra imagen en un arreglo de bytes.

private byte[] GetBytes(Image imageIn)
{
//
//Usamos la clase MemoryStream para contener los bytes que compone la imagen
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,
ImageFormat.Png);
//
//Retornamos el arreglo de bytes
return ms.ToArray();
}

17. Ubique el método InvoiceGenerate() y agregue las siguiente líneas de código:

//
// Usamos la Función GetBytes() para convertir la imagen cargada al PicureBox en un arreglo de Bytes para establecérselo a nuestra propiedad Logo
_factura.Logo = GetBytes(pctboxLogo.Image);

Después de haber realizado todo lo anterior solo nos resta probar nuestra aplicación.


Ejecute la aplicación presionado la tecla “F5” o desde el menú presione el botón “Iniciar”


image


En el campo “Numero” ingrese cualquier valor del 1 al 5 y presione “Enter”


image


Haga Clic sobre el botón “…” para seleccionar una imagen (yo escogeré una imagen del tipo png)


image


Observe como nuestro PictureBox muestra la imagen seleccionada:


image


Presione el botón “Imprimir” y observe como nuestra imagen es mostrada en nuestro Local Report


imageimage


Repita esta operación con tantas imágenes guste…


Por ultimo recuerde que el origen de la imagen podrías ser un arreglo de bytes almacenado en un campo de una base datos, el resultado siempre será el mismo ya que al Local Report no le interesa ni necesita saber el origen de la imagen siempre y cuando esta venga como un arreglo de Bytes


Escribir este articulo me llevo mas de 3 horas, dejar un comentario de agradecimiento le tomara 5 minutos.


Saludos desde Monterrey, Nuevo León México!


Ejemplo C#
Ejemplo Vb.Net

Nota: Al momento de migrar la aplicación de Vs2010 a Vs2012 recibí este mensaje de advertencia


Advertencia    1    El proyecto hace referencia a una versión anterior de SQL Server Compact que no tiene compatibilidad con el diseñador en la versión actual de Visual Studio. Para continuar sin compatibilidad con el diseñador, descargue SQL Server Compact 3.5 del centro de descarga de Microsoft (http://go.microsoft.com/fwlink/?LinkId=229598). Para actualizar los activos a SQL Server Compact 4.0 y habilitar la compatibilidad con el diseñador, abra el proyecto y use el cuadro de diálogo Agregar conexión para crear una conexión a la base de datos. ReportViewerInvoiceReport-CSharp”


No tuve la necesidad de realizar absolutamente nada para poder trabajar con el proyecto de ejemplo pero si usted lo desea podría actualizar la base de datos a la versión 4.0, el script para crear las estructuras de las tablas la podrá descargar en el link proporcionado en el proyecto anterior.

sábado, 18 de abril de 2015

Trabajar con archivos Excel desde WindowsForms (SpreadSheetLight)

 

Hola a todos:

En este articulo les compartiré como de una forma sencilla podemos trabajar con archivos Excel desde un proyecto de Visual Studio sin necesidad de recurrir a los tan tediosos objetos Com de Microsoft Office que muchas veces provocan mas dolores de cabeza que soluciones.

Buscando por la red la manera de como operar con archivos Excel de una forma sencilla me encontré con una pequeña librería de uso libre, la cual ofrece diferentes funcionalidades para trabajar con estos archivos sin romperse tanto la cabeza y sin la necesidad de referencias ningún objeto COM, hablo de:

SpreadSheetLight

SpreadsheetLight is an open source Open XML spreadsheet library for .NET Framework written in C#, and is released under the MIT License. You can create new Open XML spreadsheets, or work with existing Open XML spreadsheets that are compatible with Microsoft Excel 2007/2010/2013 and LibreOffice Calc.”

Esta pequeña librería explota la  característica de los Xml que conforman la mayoría de los archivos del paquete de Microsoft Office a través del uso de:

SDK de Open XML 2.5 para Office

Con el Open Xml tenemos todo el acceso disponible a los XMl de los archivos de Microsoft Office pudiendo explotar los datos y estilos contenidos en ellos de una manera muy sencilla, pero SpreadSheetLinght hace este camino aun mas fácil al exponer funcionalidad convertidos en metodos y funciones parametrizables y muy intuitivos y por debajo se encarga de explotar los XML’s por medio del Open Xml.

En este articulo les mostrare como:

1. Crear un archivo de Microsoft Office Excel desde Visual Studio en un proyecto WindowsForms y como poblarlo con datos desde un control DataGridView.

2. Como abrir, leer y cargar a un control DataGridView los datos de un archivo de Microsoft Office Excel

Como siempre…

Antes de entrar de lleno en el tema del manejo de archivos de Microsoft Office Excel recuerde que: “El objetivo no es otro mas que el de orientar a los Parvulos .Net sobre como usando una pequeña librería podemos trabajar con archivo de Microsoft Office Excel, todo lo escrito en este articulo no es ensayado y no es revisado por nadie mas por lo cual, podría contener errores gramaticales y sintácticos, el articulo y sus conceptos no pretenden ser la verdad absoluta del tema por lo tanto siéntase con la confianza de dejar sus comentarios y opiniones en la sección de comentarios al final del mismo y si lo considera prudente envíeme un correo electrónico por medio del formulario de contacto con sus ideas, opiniones y experiencias sobre el tema, y por ultimo si el articulo le es de utilidad por favor considere dejar un comentario de agradecimiento, apoyar al mismo recomendando los artículos y unirse como miembro del blog. Si se siente agradecido puede ver los anuncios que están en este articulo haciendo Click en ellos.

Requisitos: Visual Studio 2013, Framework 4.0, descargar la librería SpreadSheetLigh pero sobre todo muchas ganas de aprender.

También como siempre recomiendo encarecidamente que antes de descargar los proyectos de ejemplo (que les pondré al final de articulo), traten de hacerlo ustedes mismos siguiendo paso a paso todo lo que se mencionara aquí, si tienen dudas en uno en especifico no duden en contactarme.

Creación de un Archivo EXCEL usando SpreadSheetLingth

1. Inicie Visual Studio 2013 y cree un proyecto del tipo WindowsForms

2. Agregue un nuevo elemento del tipo WindowsForms

3. Agregue controles TextBox, label, button y un control DataGridView y cree el siguiente diseño

1

Recuerde nombrar a los controles acorde los datos que representen, ejemplo: lblIdEmpleado, txtEmpleado, txtApellidoPaterno, btnCargar, etc,

Instalar SpreadSheetLigth

Para instalar SpreadSheetLigth en nuestro proyecto, tenemos dos opciones:

1. Usar el paquete de Nuget para descargar en línea la librería e instalarla en nuestro proyecto, para esto:

Localice el Explorador de soluciones –> Seleccione el proyecto que acaba de crear –> Click derecho –> Administrar paquetes Nuget.

2

Del panel izquierdo seleccione “En línea” –> en el panel izquierdo escriba SpreadsheetLight –> Presione la tecla “Enter” –> Del panel  Central ubique SpreadsheetLight –> Click sobre el botón Instalar

3

4

Después de instalado usted podrá ver la referencia de la librería dentro de las referencias del proyecto:

5

2. La segunda opción que tiene para instalar SpreadsheetLight es mediante la creación de la referencia a la librería directamente desde las referencias del proyecto, para ello:

  • Descargue la librería desde esta dirección: SpreadSheetLight
  • En el explorador de soluciones ubique el proyecto que acaba de crear
  • Posicionese en Reference –> Click derecho –> Agregar referencia

6

  • En el panel izquierdo elija “Examinar” –> presione el botón “Examinar” –> diríjase a la ubicación de descarga –> Seleccione la librería –> Click en “Agregar” –> Click en “Aceptar” –> Después usted podrá ver la referencia a la librería en la carpeta de referencias, tal cual como se muestra en la pantalla relacionado a Nuget.

Sea cual la opción que haya escogido para instalar SpreaSheetLigth, le comento que SpreadSheetLigth tiene una dependencia hacia el OpenXml v2.0 por lo que usted tiene que descargar y referenciar esta librería, por favor descargue la librería y haga la referencia.

Bien, teniendo ambas librerías referenciadas procedamos a crear algunas líneas de código…

Crear un documento Excel usando SpreadSheetLigth:

Entiendo que usted conoce la manera de poblar un control DataGridView, de no ser así por favor antes de continuar analice lo platicado en este articulo.

Llenar DataGridView con datos de TextBox’s usando Datasource o el método Add()

Crearemos un método que mediante la librería cree un objeto del tipo SLDocument el cual nos servirá para ir seteando valores a lo que dentro del archivo Excel serán las celdas:

        /// <summary>
///
Metodo encargado de crear un archivo Excel y poblarlos con los datos de un control DataGridView
/// </summary>
private void CreateExcelFile()
{
//Creamos un objeto SqlDocument
SLDocument sl = new SLDocument();
//usamos la función SetCellValue para poblar la celda
//sl.SetCellValue(indicedefila, indicedecolumna, "valor a establecer");
sl.SetCellValue(1, 1, "Id Empleado");
sl.SetCellValue(1, 2,
"Empleado");
sl.SetCellValue(1, 3,
"Apellido Paterno");
sl.SetCellValue(1, 4,
"Apellido Materno");

//definimos el indice de la fila donde comenzaremos a vaciar los datos del DataGridView
int rowIndex = 2;
//
//definimos el indice de la columna donde comenzaremos a vaciar los datos
int columnIndex = 1;
//
//Recorremos las filas del control
foreach (DataGridViewRow row in dgvDatos.Rows)
{
//Recorremos la lista de columnas del control
for(int i = 0; i < dgvDatos.Columns.Count; i++)
{
//comenzamos a enviar los valores al objeto SLDocument, usando el valor de la fila y columna
sl.SetCellValue(rowIndex, columnIndex, Convert.ToString(row.Cells[i].Value));
columnIndex += 1;
}
rowIndex += 1;
columnIndex = 1;
}
//
//Guardamos el documento
//como no definimos ningun directorio el archivo se creara automaticamente en la carpeta bin/debug
sl.SaveAs("TestExcel.xlsx");
}
 
Cargar un documento Excel usando SpreadSheetLigth:
        private void Import()
{
//usamos el objeto FileSteam para recuperar el archivo
FileStream fs = new FileStream("TestExcel.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
//
//Creamos el obejto SLDocument para cargar el archivo Excel
SLDocument sl = new SLDocument(fs);

//refinimos el indice de la fila de donde comenzaremos a leer
int rowIndex = 2;

//recorremos el objeto SLDocument mediante un ciclo While
//este ciclo recorre el documento miestras no se encuentre una celda vacia
while (!string.IsNullOrEmpty(sl.GetCellValueAsString(rowIndex, 1)))
{
//tomamos los valores de las celdas y lo pasamos a las respectivas columnas del control DataGridView
dgvDatos.Rows.Add(sl.GetCellValueAsString(rowIndex, 1), sl.GetCellValueAsString(rowIndex, 2),
sl.GetCellValueAsString(rowIndex, 3), sl.GetCellValueAsString(rowIndex, 4));

//incrementeamos una unidad al indice de la fila para continuar con el recorrido
rowIndex += 1;
}
}

Bien hasta aqui tenemos la codificacion necesaria para Crear y Leer un archivo de Microsoft Excel usando SpreadSheetligth, solo nos queda probarlo:


Primero les mostrare que dentro de mi directorio de trabajo no tengo ningún archivo Excel:


7


Ejecute la aplicación:


8


Presione el botón Generar Excel y diríjase a su directorio de trabajo para que observe que se acaba de crear un archivo Excel y que este tiene un peso en kb lo cual significa que no esta vacío.


9


Abra el archivo y observe que los datos tal cual como los cargamos al control se encuentran en el archivo Excel.


10


Realice algunos cambios en la información cargada en el archivo, esto a fin de comprobar que la carga del archivo se realiza correctamente y que no depende solo de los datos que se crearon con la librería.


11


Ahora, probemos la carga:


Para eso asegúrese que el formulario este totalmente limpio:


1


Presione el botón “Cargar Excel” y observe como los datos se cargan correctamente:


12


Existe demasiada funcionalidad que podemos explotar de esta librería, como por ejemplo:


Definir un estilo y formato a las celdas, colores, imágenes, filtros, formulas, comentarios, copiar estilo por celda, rangos, renombrar libros, crear libros, etc.


Para mas ejemplos por favor diríjase a: http://spreadsheetlight.com/sample-code/


Para mas información y documentación sobre Open Xml, por favor dirijase a: Welcome to the Open XML SDK 2.5 for Office


Escribir este articulo me llevo mas de 1 hora, dejar un comentario de agradecimiento le tomara 5 minutos.

Saludos desde Monterrey, Nuevo León México!
Ejemplo C#
Ejemplo Vb.Net