Buenas tardes,
necesito exportar un datatable a excel. El problema viene en que cada tabla que quiero exportar contiene un total de 30000 registros, por lo que la exportación se hace muy lenta.
Escribo el metodo que uso para el boton exportar:
private void bt_reciclar_Click(object sender, EventArgs e)
{
this.Campaña();
DialogResult dr = MessageBox.Show("¿Está seguro de que quiere reciclar la campaña " + campaña + "?", "Reciclar", MessageBoxButtons.OKCancel);
string concamp = @"SELECT *
FROM " + campaña;
DataTable dt = new DataTable();
da = new SqlDataAdapter(concamp, conexion);
da.Fill(dt);
nmExcel.ApplicationClass ExcelApp = new nmExcel.ApplicationClass();
ExcelApp.Application.Workbooks.Add(Type.Missing);
for (int col = 0; col < dt.Columns.Count; col++)
{
for (int row = 0; row < dt.Rows.Count; row++)
{
ExcelApp.Cells[row + 1, col + 1] = dt.Rows[row].ItemArray[col];
}
}
if (dr == DialogResult.OK)
{
SaveFileDialog CuadroDialogo = new SaveFileDialog();
CuadroDialogo.DefaultExt = "csv";
CuadroDialogo.FileName = campaña + " resultado " + DateTime.Now.ToString("dd-MM-yyyy");
CuadroDialogo.Filter = "CSV (Delimitado por comas)|*.csv";
CuadroDialogo.AddExtension = true;
CuadroDialogo.RestoreDirectory = true;
CuadroDialogo.Title = "Guardar";
CuadroDialogo.InitialDirectory = @"c:\";
if (CuadroDialogo.ShowDialog() == DialogResult.OK)
{
ExcelApp.ActiveWorkbook.SaveCopyAs(CuadroDialogo.F ileName);
ExcelApp.ActiveWorkbook.Saved = true;
CuadroDialogo.Dispose();
CuadroDialogo = null;
ExcelApp.Quit();
}
else
{
MessageBox.Show("Ha cancelado la exportación a Excel");
Application.Exit();
}
}
Opciones op = new Opciones();
op.camp = campaña;
op.Show();
this.Hide();
}
Muchas gracias.