Vous êtes sur la page 1sur 3

NATALIA LPEZ Mensaje 1 de 4 , 28 jul 2011Expandir mensajes Ver cdigo fuente necesito ayuda.

tengo un error al exportar a excel usando subprocesos. Tengo un datagrid cargado con un dataset, en una aplicacin de escritorio en c#. Lo que quiero es con un botn poder exportar la grilla a un archivo de Excel. Lo que me aplicacin tiene demasiados registros lo q necesito es mostrar un cartel mientras se est procesando la carga del archivo de Excel. Cartel de q el usuario debe esperar. Esto lo resuelvo con un subproceso. Describo los pasos y donde es q me salta el error. Hago click al botn y se muestra el formulario splash q es el q me avisa de la esp era. Luego me sale el SaveFileDialog, que el control donde elijo donde guardar, y cdo le doy click a guardar me sale este cartel. Me da error en la lnea: ExcelApp.ActiveWorkbook.SaveCopyAs(CuadroDialogo.FileName); Referencia a objeto no establecida como instancia de un objeto. Este es el cdigo que uso:

using System.Threading; using nmExcel = Microsoft.Office.Interop.Excel;

namespace MonitoreoTotal.Presentacion { public partial class MonitoreoTotal : Form {

public MonitoreoTotal() { InitializeComponent(); } nmExcel.ApplicationClass ExcelApp = new nmExcel.ApplicationClass(); ---------------------

private void BtnExcel_Click(object sender, EventArgs e)

{ string nombre; nombre = "monitorizacin"; ProcesoInicioFormSplash pInic = new procesoInicioFormSplash(); Thread tAux = new Thread(new ThreadStart(exportarAExcel)); tAux.Start(); // Ejecutamos el subproceso while (!tAux.IsAlive) ; //------- Cargamos y mostramos el formulario Splash durante 5 minim o ----frmSplashExcel f = new frmSplashExcel(5, tAux); f.ShowDialog(this); f.Dispose(); //---------- cuadro de dialogo para Guardar SaveFileDialog CuadroDialogo = new SaveFileDialog(); CuadroDialogo.DefaultExt = "xls"; CuadroDialogo.Filter = "xls file(*.xls)|*.xls"; CuadroDialogo.AddExtension = true; CuadroDialogo.RestoreDirectory = true; CuadroDialogo.Title = "Guardar archivo de Excel"; CuadroDialogo.InitialDirectory = @"c:\"; CuadroDialogo.FileName = nombre + DateTime.Now.ToString("dd-MM-yyyy" ); if (CuadroDialogo.ShowDialog() == DialogResult.OK) { ExcelApp.ActiveWorkbook.SaveCopyAs(CuadroDialogo.FileName); ExcelApp.ActiveWorkbook.Saved = true; CuadroDialogo.Dispose(); CuadroDialogo = null; ExcelApp.Quit(); MessageBox.Show("El excel se creo correctamente en el lugar eleg ido .. ", "MENSAJE", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("No se pudieron guardar Datos .. ", "MENSAJE", M essageBoxButtons.OK, MessageBoxIcon.Information); } } private void exportarAExcel() { nmExcel.ApplicationClass ExcelApp = new nmExcel.Application Class(); ExcelApp.Application.Workbooks.Add(Type.Missing); ExcelApp.Columns.ColumnWidth = 12; for (int icol = 0; icol < dgMonitorizacion.Columns.Count; icol++ ) {

ExcelApp.Cells[1, icol + 1] = dgMonitorizacion.Columns[icol] .HeaderText; } for (int i = 0; i < dgMonitorizacion.Rows.Count; i++) { DataGridViewRow Fila = dgMonitorizacion.Rows[i]; for (int j = 0; j < Fila.Cells.Count; j++) { ExcelApp.Cells[i + 2, j + 1] = Fila.Cells[j].Value; } }

Vous aimerez peut-être aussi