#1 Crear un archivo de Excel desde C# con WebForms Este código de C#, es un método (fácilmente se le puede hacer la llamada desde un botón que diga "crear" o "guardar") que crea un archivo de EXCEL en la ubicación que el usuario elija, en mi caso necesité crear una plantilla, se los pongo básico ya que el formato depende de cada quién y lo importante es la idea de cómo hacerlo.
Primero debemos generar la referencia a la librería del Office, para ello vamos arriba al menú Proyecto, Agregar Referencia, en la Pestaña COM marcamos el que tiene de nombre Microsoft Excel 11.0 Object Library o similar.
1. Las librerías a implementar son:
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
2. Variables a utilizar (esto es de cada quién, de acuerdo a lo que se vaya a realizar):
string filename, filePath;
3. Este paso es sólo para los que tienen EXCEL en inglés y el Sistema Operativo en otro idioma, en mi caso tengo EXCEL 2003 en inglés y Windows XP Profesional en Español. Se deben colocar estas líneas para solucionar un "bug" que trae el Office:
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");
4. Se crea la instancia de la aplicación:
oXL = new Excel.Application();
5. Lo siguiente es abrir el cuadro de diálogo para salvar el archivo, se hace con la siguiente línea, el primer parámetro es el nombre sugerido que le queramos dar, el segundo es el filtro de extensiones, el tercero es el índice del filtro (cual estará marcado), el cuarto es el título de la ventana y el quinto es el nombre del botón (sólo funciona con Macintosh). El Missing.Value es usado para llenar el campo de los parámetros opcionales y que no van a ser utilzados, se debe hacer así porque en C# no se pueden omitir.
filePath = oXL.GetSaveAsFilename("PRUEBA", "Archivos de Excel (*.xls), *.xls", 1, "Guardar prueba", Missing.Value).ToString();
6. Se crea el libro y la hoja, se ejecuta el código que necesitemos implementar en el archivo (si es que necesitamos hacerle algo):
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value) ); // crear el Workbook
oSheet = (Excel._Worksheet)oWB.ActiveSheet; // crear la Hoja
oSheet.Cells[1, 1] = "HOLA"; //Columna,Fila
oSheet.Cells[1, 2] = "MUNDO;
7. Algo de formato:
oSheet.Name = "Ingreso de Equipo"; //Nombre de la hora
oSheet.get_Range(A1, A2).Font.Bold = true; //Letra negrita
oSheet.get_Range(A1, A2).Interior.ColorIndex = 9; //Color de Fondo, 9 es rojo oscuro, entre 0-56
oSheet.get_Range(A1, A2).Font.ColorIndex = 2; //Color de letra, 2 es blanco, entre 0-56
oSheet.get_Range(A1, A2).WrapText = true; //Respetar ancho de la celda
oSheet.get_Range(A1, A2).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//Alineación horizontal
oSheet.get_Range(A1, A2).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; //Alineación vertical
oSheet.get_Range(A1, A2).ColumnWidth = 20; //Ancho de la columna
oSheet.get_Range(A1, A2).BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, Excel.XlColorIndex.xlColorIndexAutomatic); //Borde
//Hay muchas opciones, sólo es de probar hasta conseguir lo que necesitemos.
8. Si se desea visualizar el archivo se agregan estas líneas, si no, se puede omitir sin problemas.
oXL.Visible = true;
oXL.UserControl = true;
9. Guardamos el archivo y lo cerramos
oXL.ActiveWorkbook.Close(true, filePath, Type.Missing);
oXL.Quit();
oXL = null;
10. Limpiamos cualquier proceso de Excel que haya quedado abierto luego de crear el archivo y regeneramos el archivo Culture (el del bug, para dejarlo como al inicio).
System.Threading.Thread.CurrentThread.CurrentCultu re = CurrentCI; // restaura el CultureInfo
System.Diagnostics.Process[] myProcesses;
myProcesses = System.Diagnostics.Process.GetProcessesByName("EXC EL");
foreach (System.Diagnostics.Process instance in myProcesses) {
instance.CloseMainWindow();
instance.Kill();
instance.Close();
}
--------
Pues bien, espero que a alguien le llegue a servir porque a mi este código me dejó satisfecho luego de haber buscado muchísimo la forma de hacerlo.
Saludos!
NOTA: Si se toma todo el código expuesto aquí y se coloca junto en un proyecto, éste debería compilar ya que lo que hice fue copiarlo de mi sistema e incluirle las instrucciones sólamente.
Saludos!