`
yake2011
  • 浏览: 18988 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

How to Export Data to Excel from an ASP.NET Application + Avoid the File Format

 
阅读更多

 

原文链接

 

 

30 Jan 2009 5:25 PM

 

This is a common task for ASP.NET developers. You have a Web application where you expose data from a database, Web service, or third-party API and you need an "Export to Excel" button. I have used different approaches to export to Excel from a Web application. Here's some options and guidance of when to use each one.

  1. Generate a CSV file: If you open a CSV file in Excel, you can see a table with data. You can use this approach if you don't need control over formatting, styles, or workbook structure. I have used this approach when I pull data from a data source and I don't need to render it on the browser. For example, you are working on a stock options solution and you connect to a Web service that pulls stock market prices. Your users don't want to see detailed stock information on a browser and prefer that you generate and Excel file where they can pivot stock prices.
  2. Generate an XML file: (with or without an XSLT, depending if you want to control the schema). Have you opened an XML file in Excel? This is pretty cool. Excel allows you to open XML files with our without a schema. You can also see a table of data in Excel and can have some control on formatting if you use a schema. I have used this approach when I have a data source that is already in XML format.
  3. Generate from GridView: I like this one a lot and I think it's a common practice between ASP.NET developers. Some page forms in ASP.NET Web applications display data in data controls. The GridView is a popular control that displays data in a table format. You can use it to bind to data source controls, such as SqlDataSource. You can export to Excel from a GridView using a StringWriter and an HtmlTextWriter. You can use this approach if you already have a page with a GridView. You already did a round-trip to get the data from any given source, so why do it twice? The issue is that you have little control over formatting, style, or workbook structure.
  4. Generate an Excel file using the Open XML SDK 2.0: If you use this approach you gain absolute control of the spreadsheet format and content. For example, you can generate a worksheet with a table and another one with a chart based on the same data source. You can have control over formats, styles, content, and document structure. Zeyad has a great post where he provides a detailed sample for this approach: Document Assembly Solution for SpreadsheetML.

Note: I can't stop to mention the big no-no… using the Excel PIA to generate a spreadsheet server-side. This is not a good practice and it's not recommended or supported, so let's forget about this one.

 

Now, for those of you who are working with any of the first three approaches, you may have seen the prompt of file format differ each time you export to Excel.



 

You get this message because you are opening a file in Microsoft Office Excel 2007 that contains content that does not match the files extension.

 

I am not very annoyed about this, but I know some people are. By default, a user can decide whether to open the file when the warning message is displayed, but you can control user-notification either:

  1. Updating the registry if you need to control the user-notification on a few PCs.
  2. Using a Group Policy Setting if you need to control the user-notification on lots of PCs.

Here's a KB article that provides detailed steps for both options: When you open a file in Excel 2007, you receive a warning that the file format differs from the format that the file name extension specifies.

 

Here's a quick code sample in C# for approach 3 (Export from GridView) that you can use to export to Excel. I changed my registry following the steps explained in the previous article and it worked like a charm. No prompt!

 

<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false" %>

<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Export to Excel - GridView Sample</title>
</head>

<script language="C#" runat="server">
    
    // Get files from selected path    
    private void BindFiles() {
        DirectoryInfo di = new DirectoryInfo(tbPath.Text);
        gvFiles.DataSource = di.GetFiles();
        gvFiles.DataBind();
    }

    protected void btnExportToExcel_Click(object sender, EventArgs e) {
        ExportToExcel();
    }
    
    //Export to Excel from a GridView
    protected void ExportToExcel() {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls");
        Response.Charset = "";
        this.EnableViewState = false;

        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

        gvFiles.RenderControl(htw);

        Response.Write(sw.ToString());
        Response.End();
    }

    protected void Page_Load(object sender, EventArgs e) {
        BindFiles();
    }

    public override void VerifyRenderingInServerForm(Control control) {
    }

</script>

<body>
    <form id="form1" runat="server">
    <div>
        <h1>
            My Files</h1>
        <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 12%">
            <tr>
                <td>
                    Path:
                </td>
                <td>
                    <asp:TextBox ID="tbPath" runat="server" Width="600px" Text="C:/"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                     
                </td>
                <td>
                    <asp:Button ID="btnExportToExcel" runat="server" Text="ExportToExcel" 
                        onclick="btnExportToExcel_Click" />
                </td>
            </tr>
        </table>
    </div>
    <asp:GridView ID="gvFiles" runat="server">
    </asp:GridView>
    <br />
    </form>
</body>
</html>

 

Erika Ehrli Cabral

Microsoft

 

21,225
Recent Achievements232
Blog Commentator IIBlog Party StarterBlogger III
  • 大小: 83.7 KB
分享到:
评论

相关推荐

    ASP.NET+Core+2+and+Angular+5-Packt+Publishing(2017).pdf

    It's only been a year since I wrote ASP.NET Core and Angular 2, but it definitely feels a lot more, at least from a web developer's perspective. Modern web technologies are still improving at ...

    Pro ASP.NET MVC 5 Platform(Apress,Adam.Freeman,2014)

    To make your ASP.NET MVC applications the best they can be, you need to fully understand the platform features and know how they can be used to build effective and elegant MVC framework applications....

    ASP.NET Web API 2 Recipes(英文pdf)

    ASP.NET Web API 2 Recipes gives you an in-depth explanation for each of these scenarios and shows you how to use Web API with a vast array of .NET application development tools and external libraries...

    ASP.NET 4.5入门经典:涵盖C#和VB.NET(第7版) 源码

    Contains the comprehensive guide to the latest technology additions to ASP.NET 4.5 Shows how to build basic ASP.NET web pages and configure their server Includes information on how to add features ...

    Professional ASP.NET 3.5 SP1 Edition: In C# and VB(part1)

    How to create templated ASP.NET pages using the master page feature * How to work with data from enterprise databases including SQL Server® * Ways to debug, package, and deploy ASP.NET ...

    ASP.NET Core: Cloud-ready, Enterprise Web Application Development

    Starting with an overview of the MVC pattern, you will quickly dive into the aspects that you need to know to get started with ASP.NET. You will learn about the core architecture of model, view, and ...

    Bootstrap for ASP.NET MVC

    The book includes practical examples to show you how to use open source plugins with Bootstrap and ASP.NET MVC and will guide you through building an ASP.NET MVC website using Bootstrap, utilizing ...

    [ASP.NET] ASP.NET 4 高级程序设计 (C# 2010 实现) (英文版)

    This edition is updated with everything you need to master up to version 4 of ASP.NET, including coverage of ASP.NET MVC, ASP.NET AJAX 4, ASP.NET Dynamic Data, and Silverlight 3. Seasoned .NET ...

    Learning ASP.NET Core MVC Programming

    Starting with an overview of the MVC pattern, we quickly dive into the aspects that you need to know to get started with ASP.NET. You will learn about the core architecture of model, view, and ...

    [ASP.NET] ASP.NET 4.5 入门经典 (C# & VB 语言实现) (英文版)

    Contains the comprehensive guide to the latest technology additions to ASP.NET 4.5 Shows how to build basic ASP.NET web pages and configure their server Includes information on how to add features ...

    ASP.NET Core 1.1 For Beginners: How to Build a MVC Website

    The goal is to learn ASP.NET Core 1.1 by building two web applications, one from scratch and one from an existing template. This experience is something you can put in your CV when applying for a job ...

    Spring.NET + NHibernate + ASP.NET MVC Demo

    【Spring.NET + NHibernate + ASP.NET MVC Demo】是将三个重要的开源框架整合在一起,构建一个高效、可扩展的Web应用程序的实例。这个Demo展示了如何利用这些技术构建一个中英文双语的小型企业网站。 Spring.NET是...

    Test-Drive ASP.NET MVC

    Drive ASP.NET MVC gets you started with all the fundamentals you need, whether you’re transitioning from older Microsoft technologies, or if you’re coming from an open-source background and are ...

    How To Automate Excel to Create And Format a New Workbook Using C++ .NET and MFC

    ### 如何使用C++ .NET和MFC自动化Excel创建及格式化新的工作簿 #### 概述 本文档详尽地介绍了如何通过Microsoft Foundation Classes (MFC) 和 Microsoft Visual C++.NET来创建针对Excel的自动化客户端。自动化允许...

    ASP.NET MVC MSDN 文档 CHM

    ASP.NET MVC 1.0 MSDN Reference...How to: Deploy an ASP.NET MVC Application How to: Add a Custom MVC Test Framework in Visual Studio ASP.NET MVC Reference -------------------- 有人嫌贵,特将资源分调整为2.

    Beginning ASP.NET 4 in VB 2010

    * How to build well-structured ASP.NET applications from the first principles, including how to incorporate data from databases, XML files, web services, and other services. * A solid understanding ...

Global site tag (gtag.js) - Google Analytics