how to create and download excel document using asp.net

后端 未结 4 412
予麋鹿
予麋鹿 2020-12-08 06:04

How to create and download excel document using asp.net ?

The purpose is to use xml, linq or whatever to send an excel document to a customer via a browser.

相关标签:
4条回答
  • 2020-12-08 06:10

    just set Response.ContentType = "application/vnd.ms-excel" and your page will rendered as an excel sheet on the clients browser

    Sample code here

    0 讨论(0)
  • 2020-12-08 06:20

    There are quite a few ways of handling this, depending on how extensive the Excel functionality is. Binoj's answer works if the Excel is just a spreadsheet and has no direct Excel functionality built in. The client can add functionality, concats, etc. These are "dumb" excel docs until the client does soemthing.

    To create a more full featured Excel doc, you havve two basic choices that I can think of offhand.

    1. Use either the office components (re: bad) to create an excel document, or a third party component, like SoftArtisan's ExcelWriter. Great component, but there is a cost.

    2. Use a control on the page that allows export to Excel. Most vendors of ASSP.NET controls have this functionality on their grids.

    Option #1 allows you pretty much all functionality of Excel. Option #2 is a bit more limited, at least in the controls I have tried.

    0 讨论(0)
  • 2020-12-08 06:24

    Good article on how top export to excel from Erika Ehrli http://blogs.msdn.com/erikaehrli/archive/2009/01/30/how-to-export-data-to-excel-from-an-asp-net-application-avoid-the-file-format-differ-prompt.aspx

    0 讨论(0)
  • 2020-12-08 06:28

    Starter kit

    First i have downloaded the Open XML Format SDK 2.0.

    It comes with 3 useful tools in :

    C:\Program Files\Open XML Format SDK\V2.0\tools

    • DocumentReflector.exe wich auto generate the c# to build a spreadsheet from the code.
    • OpenXmlClassesExplorer.exe display Ecma specification and the class documentation (using an MSDN style format).
    • OpenXmlDiff.exe graphically compare two Open XML files and search for errors.

    I suggest anyone who begin to rename .xlsx to .zip, so you can see the XML files who drive our spreadsheet ( for the example our sheets are in "xl\worksheets" ).


    The code

    Disclaimer : I have stolen all the code from an MSDN technical article ;D

    The following code use an *.xlsx template i made manually to be able to modify it.

    Namespaces references

    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:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\livreurs.xlsx", @"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true);
    
            // Open the copied template workbook. 
            using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.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<SheetData>();
    
                // 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();
    
            }
    

    I havent finished yet, my second job is to auto download the spreadsheet after modification.


    Finally, i redirect the user to my generated spredsheet (from my aspx)

     context.Response.Redirect("Oxml-tpl/generated.xlsx");
    
    0 讨论(0)
提交回复
热议问题