Para realizar la exportación creamos una clase con el método exportar al que pasaremos el nombre del fichero Excel resultante, el nombre de las hojas del Excel (tantos como datatables tenga el dataset) y, el dataset con los datos.
El dataset puede contener varios DataTables así que el método creará una hoja de Excel por cada datatable del dataset.
Vamos a ver en profundidad el método de creación del Excel.
Como he comentado anteriormente le pasamos el nombre que recibirá el fichero de Excel cuando lo guardamos en disco, un array de strings que son los nombres de las hojas y el dataset con los datos
public static void Export(string ExcelName, string[] sheets, DataSet DS) {
Esta línea sólo interesa a los que tenemos instalados en diferentes idiomas las aplicaciones. Si no se pone el programa genera un error como este:Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
Ponemos el código dentro de un control de errores.try {
Creamos la aplicación ExcelApplication _excel = new Application();
Creamos el libro que vamos a utilizarWorkbook _wBook = _excel.Workbooks.Add(Missing.Value);
Por cada tabla dentro del dataset creamos una hoja del libro de Excel.for (int idx = 0; idx < DS.Tables.Count; idx++) {
Creamos la nueva hoja.Worksheet _sheet = (Worksheet)_wBook.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Damos nombre a la hoja, en el ejemplo pasamos el nombre a través de un array desde la aplicación._sheet.Name = sheets[idx];
Recorremos la tabla y rellenamos los títulos de las columnas.for (int i = 0; i < DS.Tables[idx].Columns.Count; i++) {
sheet.Cells[1, i + 1] = DS.Tables[idx].Columns[i].ColumnName.ToString();
}
Range rng = (Range)_sheet.Cells[1, DS.Tables[idx].Columns.Count];
rng.EntireRow.Font.Bold = true;
rng.EntireRow.Interior.ColorIndex = 3;
for (int i = 0; i < DS.Tables[idx].Rows.Count; i++) {
for (int k = 0; k < DS.Tables[idx].Columns.Count; k++) {
sheet.Cells[i + 2, k + 1] =
DS.Tables[idx].Rows[i].ItemArray[k];
}
}
string path = config.ConfigurationSettings.AppSettings["pathExcel"];
ExcelName = path + ExcelName + ".xls";
if (ficheros.File.Exists(ExcelName)) {
ficheros.File.Delete(ExcelName);
}
excel.ActiveCell.Worksheet.SaveAs(ExcelName, XlFileFormat.xlExcel8, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Si ponemos Visible a TRUE en los programas Windows abrirá el Excel._excel.Visible = true;
deleteProcess es un método para eliminar el proceso del EXCEL por si se queda colgado en el ordenador.deleteProcess();
Definimos el control de errores.catch (Exception EX) {
string ss = EX.Message;
}
Y dos clases diferentes para exportar a Excel una ExporToExcel para utilizar con office 2007 y otra ExportToExcel11 para utilizar con Office 2003.
Como requisito hay que instalar Microsoft Visual Studio 2005 Tools para Office Second Edition Runtime (VSTO 2005 SE) (x86).
Enlaces relacionadas:
Ejemplos version office 2003
Ejemplos version office 2007
Clase ExportToExcel (renombrar a c)
Y esto es todo!!!
Saludos
Alex.