Saltar al contenido

cómo crear y descargar un documento de Excel usando asp.net

Si te encuentras con alguna parte que te causa duda puedes dejarlo en los comentarios y te ayudaremos lo más rápido posible.

Solución:

Kit de inicio

Primero he descargado el Formato XML abierto SDK 2.0.

Viene con 3 herramientas útiles en:

C:Archivos de programaOpen XML Format SDKV2.0tools

  • DocumentReflector.exe que genera automáticamente el C# para crear una hoja de cálculo a partir del código.
  • OpenXmlClassesExplorer.exe mostrar la especificación Ecma y la documentación de la clase (utilizando un formato de estilo MSDN).
  • OpenXmlDiff.exe compare gráficamente dos archivos Open XML y busque errores.

Sugiero a cualquiera que comience a rebautizar.xlsxpara.Código Postalpara que pueda ver los archivos XML que manejan nuestra hoja de cálculo (por ejemplo, nuestras hojas están en “xlworksheets”).


El código

Descargo de responsabilidad : He robado todo el código de un Artículo técnico de MSDN ;D

El siguiente código usa una plantilla *.xlsx que hice manualmente para poder modificarla.

Referencias de espacios de nombres

using System.IO;
using System.Xml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;


// Database object
        DataClassesDataContext db = new DataClassesDataContext();

        // Make a copy of the template file.
        File.Copy(@"C:inetpubwwwrootproject.WebClientsHandlersoxml-tpllivreurs.xlsx", @"C:inetpubwwwrootproject.WebClientsHandlersoxml-tplgenerated.xlsx", true);

        // Open the copied template workbook. 
        using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:inetpubwwwrootproject.WebClientsHandlersoxml-tplgenerated.xlsx", true))
        
            // Access the main Workbook part, which contains all references.
            WorkbookPart workbookPart = myWorkbook.WorkbookPart;

            // Get the first worksheet. 
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.ElementAt(2);

            // The SheetData object will contain all the data.
            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild();

            // Begining Row pointer                       
            int index = 2;

            // Database results
            var query = from t in db.Clients select t;

            // For each item in the database, add a Row to SheetData.
            foreach (var item in query)
            
                // Cell related variable
                string Nom = item.Nom;

                // New Row
                Row row = new Row();
                row.RowIndex = (UInt32)index;

                // New Cell
                Cell cell = new Cell();
                cell.DataType = CellValues.InlineString;
                // Column A1, 2, 3 ... and so on
                cell.CellReference = "A"+index;

                // Create Text object
                Text t = new Text();
                t.Text = Nom;

                // Append Text to InlineString object
                InlineString inlineString = new InlineString();
                inlineString.AppendChild(t);

                // Append InlineString to Cell
                cell.AppendChild(inlineString);

                // Append Cell to Row
                row.AppendChild(cell);

                // Append Row to SheetData
                sheetData.AppendChild(row);

                // increase row pointer
                index++;                

            

            // save
            worksheetPart.Worksheet.Save();

        

Todavía no he terminado, mi segundo trabajo es descargar automáticamente la hoja de cálculo después de la modificación.


Finalmente, redirijo al usuario a mi hoja de cálculo generada (desde mi aspx)

 context.Response.Redirect("Oxml-tpl/generated.xlsx");

simplemente configure Response.ContentType = “application/vnd.ms-excel” y su página se representará como una hoja de Excel en el navegador del cliente

Ejemplo de código aquí

Te invitamos a corroborar nuestra faena fijando un comentario o dejando una puntuación te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *