【转】asp.net导出数据到Excel的三种方法

简介: 来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/cpp2017/article/details/2244368   asp.net导出到Excel也是个老生常谈的问题,在此归纳一下。

来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html

原文出处:http://blog.csdn.net/cpp2017/article/details/2244368

 

asp.net导出到Excel也是个老生常谈的问题,在此归纳一下。

第一种是比较常用的方法。是利用控件的RenderControl功能,得到该控件生成的HTML,然后以Excel文件的类型输出到客户端。这种方法生成的其实是个HTML文件,只不过Excel支持HTML格式,所以使用起来似乎和真正的Excel文件没什么两样,但它终究不是Excel格式,它不能当作数据源供其他程序调用。

这种实现起来比较简单,就不多述,请看代码。

 1 public  void ExportExcel( System.Web.UI.WebControls.WebControl objControl, string strFileName)
 2         {
 3              
 4             strFileName = System.Web.HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8);
 5 
 6             
 7            
 8             System.Web.HttpContext.Current.Response.Clear();
 9             System.Web.HttpContext.Current.Response.Buffer = true;
10             System.Web.HttpContext.Current.Response.Charset = "gb2312";
11             System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "online; filename=" + strFileName + ".xls");
12             System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
13             System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
14             
15             System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("zh-CN", true);
16             System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
17             System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
18            
19             objControl.RenderControl(oHtmlTextWriter);
20           
21             objControl = null;
22             System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString().Replace("<td", "<td STYLE='MSO-NUMBER-FORMAT:\@'"));
23             System.Web.HttpContext.Current.Response.Buffer = false;
24             System.Web.HttpContext.Current.Response.End();
25         }

可能出现的错误:

1、只能在执行 Render() 的过程中调用 RegisterForEventValidation;

解决办法:修改页面选项<%@ Page EnableEventValidation = "false"

还有一种办法是修改web.config的,但影响全局,这里就不推荐了。

2...必须放在具有 runat=server 的窗体标记内。

解决办法:

在页面中重写VerifyRenderingInServerForm方法,不对控件要求form容器进行验证

 public override void VerifyRenderingInServerForm(Control control)
 {
      //这里没有内容。
 }
第二种方法是利用Excel的Com接口库来完成,这种方法的优点是功能强大,可像使用Excel程序一样来操作Excel文件,缺点是需要服务器安装Excel程序,且需要一定的安全配置。

一、准备工作:

1)安装Microsoft Excel

2)Com的安全设置。

   在命令行输入DCOMCNFG ,进入组件服务设置界面,如图:

右键点击属性,然后点击“安全”,将“启动和激活权限”、“访问权限”、“配置权限”都选择自定义,然后添加运行ASP.NET的用户(IIS6以上是NETWORK SERVICE以下是ASPNET),给予全部权限,如图所示:

3)配置文件目录权限,因为可能要保存文件到某目录中,所以要将该目录对ASP.NET用户予以写入权限。

二、使用

在VS.NET的工程中添加引用,如图:

如果添加引用后Excel组件不能正常使用(excel组件的左边显示一个黄色的感叹号),可以使用.Net工具进行组件转换。

转换方法,运行vs.net的命令行工具,进入Office目录,输入TlbImp Excel.exe即可,然后删除有问题的引用重新添加引用,这次使用浏览,然后引用Excel.DLL。

根据我的经验,vs2003可以直接引用Microsoft  Excel x.0 ObjectLibary,而vs2005就需要使用工具转换成DLL才可使用。

然后即可以使用Excel.Application对象来操作它了。

以下就一段简单的将GirdView的数据导出到Excel的代码,功能较简单,权当抛砖引玉了。

 1 this.GridView1.DataBind();
 2 
 3     Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
 4    object oMissing  = System.Reflection.Missing.Value;
 5             
 6    oExcel.Workbooks.Add(oMissing);
 7    Excel.Workbook oBook = oExcel.Workbooks[1];
 8    Excel.Worksheet oSheet = (Excel.Worksheet)oBook.Sheets[1];
 9    oSheet.Name = this.Title;
10            
11    Excel.Range rg;
12 
13    for (int j = 0; j < this.GridView1.HeaderRow.Cells.Count; j++)
14   {
15       rg = ((Excel.Range)oSheet.Cells[ 1, j + 1]);
16       rg.FormulaR1C1 = this.GridView1.HeaderRow.Cells[j].Text;
17     }
18 
19     for(int i = 0;i<this.GridView1.Rows.Count;i++)
20   {
21       for (int j = 0; j < this.GridView1.Rows[0].Cells.Count; j++)
22     {
23        rg = ((Excel.Range)oSheet.Cells[i + 2, j+1]);
24        rg.FormulaR1C1 = this.GridView1.Rows[i].Cells[j].Text;
25       }
26     }
27     rg = null;
28 
29     string VirFileName = Guid.NewGuid().ToString() + ".xls";
30     oBook.SaveAs(Server.MapPath(VirFileName), Excel.XlFileFormat.xlExcel9795, oMissing, oMissing, oMissing, oMissing, Excel.XlSaveAsAccessMode.xlExclusive,
31     oMissing, oMissing, oMissing, oMissing, oMissing);
32     oExcel.Workbooks.Close();
33     oExcel.Quit();
34            
35     oSheet = null;
36     oBook = null;
37     oExcel = null;
38 
39      GC.Collect();
40 
41      Response.Redirect(VirFileName);

说明一下:为了Excel进程在使用完成后能彻底退出,需要将所有对象在使用完成后清空,像代码中的rg,oSheet,oBook,oExcel等。

第三种方法是利用OELDB数据访问对象操作Excel文件,达到将数据导出到Excel的目的,这种方法可能用的人不太多,缺点是必须有一个存在的Excel文件。优点是服务器不需要安装Excel,且生成的Excel是标准的Excel格式可以当作数据源使用。

准备工作:

1)先用准备一个Excel文件,这个Excel文件可以是空的,或是有一定格式的当做数据模板使用。

2)将操作的目录给ASP.NET用户(ASPNET 或NETWORK SERVICE)写入权限。

以下是示例:

说明一下:如果这个模板文件是个空文件,则需要使用Create Table创建一个工作表,否则只需使用已有的表进操作就可以了。

 1 DataTable dt = new DataTable();
 2    dt.Columns.Add("name");
 3    dt.Columns.Add("age", typeof(int));
 4    dt.Columns.Add("phone");
 5    dt.Rows.Add("老张", 40,"99213812");
 6    dt.Rows.Add("小李", 28,"a21313");
 7    dt.Rows.Add("小王", 22,"2131434");
 8 
 9 
10    string FileName = Guid.NewGuid().ToString()+".xls";
11 
12    string sNewFullFile = Server.MapPath(FileName);
13    try
14    {
15        File.Copy(Server.MapPath("format.xls"), sNewFullFile);
16     }
17     catch (Exception er)
18     {
19           Response.Write(er.Message);
20           return;
21     }
22     string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=" + sNewFullFile + ";Extended Properties=Excel 8.0;";
23     System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
24     OleDbCommand cmd = null;
25 
26     bool bRet = false;
27     try
28     {
29        conn.Open();
30        cmd  = new OleDbCommand("create table [sheet4]([姓名] Text,[年龄] int,[电话] Text)",conn);
31        cmd.ExecuteNonQuery();
32        string strSQL = "INSERT INTO [Sheet4$] ([姓名], [年龄],[电话]) VALUES (?, ?, ?)";
33        cmd = new OleDbCommand(strSQL, conn);
34        for (int i = 0; i < 3; i++)
35        {
36           cmd.Parameters.Add(i.ToString(), OleDbType.VarChar);
37        }
38        DataView dv = dt.DefaultView;
39        foreach (DataRowView row in dv)
40        {
41             cmd.Parameters[0].Value = row["name"].ToString();
42             cmd.Parameters[1].Value =(int) row["age"];
43             cmd.Parameters[2].Value = row["phone"].ToString();
44             cmd.ExecuteNonQuery();                     
45        }
46        bRet = true;
47     }
48     catch (Exception er)
49     {
50         Response.Write(er.Message);
51     }
52      finally
53      {
54        if (cmd != null)
55        {
56           cmd.Dispose();
57        }
58           conn.Dispose();
59        }
60        if(bRet)
61          Response.Redirect(FileName);

 

相关文章
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
100 4
|
1天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
2月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
52 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
26天前
|
Java API Apache
|
29天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
37 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
337 5
|
2月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
366 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
44 7