Crear un archivo de Excel desde C# con WebForms

      • 17
      • mensajes
      • miembro desde
      • 05/05/07
    #1 Crear un archivo de Excel desde C# con WebForms

    Hola a todos, decido compartir esta información ya que en un sistema que estoy desarrollando tuve que implementar esta opción, sin embargo después de varias horas de investigación no logré encontrar una sola página que me explicara o me diera al menos una idea de cómo hacerlo en mi entorno de desarrollo, encontré opciones como el VSTO (Visual Studio Tools for Office) pero no me sirve ya que trabajo directamente sobre Visual Studio 2005 y no con el Visual Studio Team Suite, otros ejemplos implementados en VBA o VB.NET como quieran verlo, aún con la traducción del lenguaje no funcionaron, y en fin, ni en foros ni en blogs, ni siquiera en el propio de Microsoft logré hallar una respuesta, por ello luego de un híbrido de líneas de código logré crear el método que me funcionó y se los comparto, se que en algún momento alguien lo puede llegar a necesitar y les cuento que no es nada fácil llegarle debido a la poca información que se puede encontrar hasta el momento.

    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.

  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    19 comentarios / 392694 Visitas

      • 275
      • mensajes
      • miembro desde
      • 12/08/08
    08/01/2009
    #2 Re: Crear un archivo de Excel desde C# con WebForms

    una forma mas simple, rapida pero sin formato era crear un archivo de texto simple... como cualquier otro archivo de texto... separar los valores de las columnas por un TAB y los renglones con ENTER... despues solo lo guardas con extencion XLS... checa lo que te digo y veras que tarda mucho menos tiempo en hacer un archivo grande!!!
    Saludos!!!

      • 111
      • mensajes
      • miembro desde
      • 20/10/08
    03/02/2009
    #3 Re: Crear un archivo de Excel desde C# con WebForms

    ¿Probaste con el ReportViewer? ya viene con el VS2005+

      • 17
      • mensajes
      • miembro desde
      • 05/05/07
    03/02/2009
    #4 Re: Crear un archivo de Excel desde C# con WebForms

    Las dos opciones me parecen muy viables, sin embargo de acuerdo a lo que requería en ese momento, esta fue la opción que logró solucionar mi problema... es bueno que queden diversas opciones ya que alguna puede llegar a ser utilizada de acuerdo al tipo de trabajo solicitado.

      • 1
      • mensajes
      • miembro desde
      • 17/02/09
    17/02/2009
    #5 Re: Crear un archivo de Excel desde C# con WebForms
    Parcero... Muchisimas gracias por "COLGAR" esta VALIOSISIMA INFO en la red... la verdad pienso que es una manera rapida, facil y muy eficiente... NO SE PARA LOS DEMAS, pero a mi me cayo como anillo al dedo, en especial por el tipo de reporte que necesito hacer.

    PARCERO NUEVAMENTE MUCHISIMAS GRACIAS... OJALA MAS GENTE EN VEZ DE CRITICAR, COLGARA ALGUITO MEDIO BUENO Y APLICABLE DEBES EN CUANDO... sino se dieron cuenta,eso va para ud. imbeciles criticones.

    Desde Colombia, en el nuevo mundo...Oscar_10;

    Entre otras cosas, las personas que trabajan en Procesamiento de Imagenes aplicado a la Ciencia de Materiales seria bueno contactarnos !!!!
      • 13
      • mensajes
      • miembro desde
      • 15/04/09
    15/04/2009
    #6 Re: Crear un archivo de Excel desde C# con WebForms

    hola muy bueno eso eh..mira soy nuevo en esto pero nesecito una ayuda urgente haber si me ayudan, nesecito pasar mis dos rangos de un excel a dos combo box usando visual basic y office 2003; ejm. que en el combo 1 se cargen TOdos los proveedores de diversas marcas y en el combo 2 se cargen todos los productos que venden TODOS los proveedroes del combo 1 y que al momento de seleccionar un proveedor por ejm. X en el combo dos solo me muestre los productos que vende el proveedor X mas no de todos los proveedores, eso es uno...
    el otro ers que esos rangos semanal mente tengo que actualizarlos y para debo crear un boten que me abra donde yo buscar mi cuadro excel y al escojerlo y darle click nose que me salga un boton cargar y se cargen los nuevos valores de los rangos en los combos OJO todo estara dentro de una misma carpeta pero para actualizar el cuadro excel quisiera yo buscar la ruta donde se encuentra ubicado. espero que aya podido ser entendible eh encontrado codigos para conectar un excel con combobox peo me ablan de Microsoft Excel Object Library, y la verdad yo solo se de access sql y mas, mas nada de coneccion a excel por favor espero su pronta ayuda

      • 275
      • mensajes
      • miembro desde
      • 12/08/08
    15/04/2009
    #7 Re: Crear un archivo de Excel desde C# con WebForms

    Lo que necesitas es un lector de XLS en Visual Basic??
    Aqui te dejo uno...
    Espero te sea util!! Saludos!

    Archivos adjuntados Archivos adjuntados
      • 13
      • mensajes
      • miembro desde
      • 15/04/09
    15/04/2009
    #8 Re: Crear un archivo de Excel desde C# con WebForms

    ...ah muy bueno gracias pero no me ayuda mucho esa parte, en ese boton que es para buscar la ruta de xls ya lo tenia lo que quiero es; al abrir ese boton con puntos suspencivos que es para buscar la ruta del .xls y alencontrarlo que se carge los valores de las columunas en los combos, ejm columna A que se cargen todo sus valores en el combobox1, columna B que se cargen todos sus valores en el combobox2. y asi sucecivamente y al escojer un dato del combobox1 antumantimante en el combobox2 solo aparacescas los productos quevende el proveedor ejm X que se seleciono del combobox1 mas no de todos los proveedores existentes en el combobox1, espero tu ayuda ya que es la primera vz que intento algo con excel
    gracias

      • 275
      • mensajes
      • miembro desde
      • 12/08/08
    16/04/2009
    #9 Re: Crear un archivo de Excel desde C# con WebForms

    el codigo que publique es lo que necesitas... solo modifica el codigo para que deposite los valores en el combo 1 (solo el combo 1) despues en el evento LostFocus del combo1 pon un codigo que reabra el excel y haga el barrido de este... con un IF bucas el valos de la columna 1 y si es igual al seleccionado que agregue ese valor al Combo2... asi de facil...

      • 5
      • mensajes
      • miembro desde
      • 14/01/10
    14/01/2010
    #10 Re: Crear un archivo de Excel desde C# con WebForms

    En mi caso me marca error el código en:

    oXL = new Excel.Application();
    Dice que oXL is not valid in the current context: que es eso?

12 Último
IR ARRIBA