Asp.net操作Excel更轻松

标签: asp.net excel | 发表时间:2011-10-14 03:18 | 作者:WILLPAN Bloger
分享到:
出处:http://www.cnblogs.com/

今天先介绍一个关于导出数据的例子,以Excel为模板。直接进入正题了。

 1.操作Excel的动态链接库(暂时没有下载地址,稍后提供)

2.建立操作动态链接库的共通,方便调用。(ExcelHelper)

具体如下:

View Code
  1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Linq;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.HtmlControls;
9 using System.Web.UI.WebControls;
10 using System.Web.UI.WebControls.WebParts;
11 using System.Xml.Linq;
12 using System.IO;
13 using System.Reflection;
14 using System.Diagnostics;
15 using System.Collections;
16
17 /// <summary>
18 ///ExcelHelper 的摘要说明
19 /// </summary>
20 public class ExcelHelper
21 {
22 private string reportModelPath = null;
23 private string outPutFilePath = null;
24 private object missing = Missing.Value;
25 Excel.Application app;
26 Excel.Workbook workBook;
27 Excel.Worksheet workSheet;
28 Excel.Range range;
29
30 /// <summary>
31 /// 获取或设置报表模板路径
32 /// </summary>
33 public string ReportModelPath
34 {
35 get { return reportModelPath; }
36 set { reportModelPath = value; }
37 }
38
39 /// <summary>
40 /// 获取或设置输出路径
41 /// </summary>
42 public string OutPutFilePath
43 {
44 get { return outPutFilePath; }
45 set { outPutFilePath = value; }
46 }
47
48
49 public ExcelHelper()
50 {
51 //
52 //TODO: 在此处添加构造函数逻辑
53 //
54 }
55
56 /// <summary>
57 /// 带参ExcelHelper构造函数
58 /// </summary>
59 /// <param name="reportModelPath">报表模板路径</param>
60 /// <param name="outPutFilePath">输出路径</param>
61 public ExcelHelper(string reportModelPath, string outPutFilePath)
62 {
63 //路径验证
64 if (null == reportModelPath || ("").Equals(reportModelPath))
65 throw new Exception("报表模板路径不能为空!");
66 if (null == outPutFilePath || ("").Equals(outPutFilePath))
67 throw new Exception("输出路径不能为空!");
68 if (!File.Exists(reportModelPath))
69 throw new Exception("报表模板路径不存在!");
70
71 //设置路径值
72 this.ReportModelPath = reportModelPath;
73 this.OutPutFilePath = outPutFilePath;
74
75 //创建一个应用程序对象
76 app = new Excel.ApplicationClass();
77
78 //打开模板文件,获取WorkBook对象
79 workBook = app.Workbooks.Open(reportModelPath, missing, missing, missing, missing, missing, missing,
80 missing, missing, missing, missing, missing, missing);
81
82 //得到WorkSheet对象
83 workSheet = workBook.Sheets.get_Item(1) as Excel.Worksheet;
84 }
85
86 /// <summary>
87 /// 给单元格设值
88 /// </summary>
89 /// <param name="rowIndex">行索引</param>
90 /// <param name="colIndex">列索引</param>
91 /// <param name="content">填充的内容</param>
92 public void SetCells(int rowIndex,int colIndex,object content)
93 {
94 if (null != content)
95 {
96 content = content.ToString();
97 }
98 else
99 {
100 content = string.Empty;
101 }
102
103 try
104 {
105 workSheet.Cells[rowIndex, colIndex] = content;
106 }
107 catch
108 {
109 GC();
110 throw new Exception("向单元格[" + rowIndex + "," + colIndex + "]写数据出错!");
111 }
112 }
113
114 /// <summary>
115 /// 保存文件
116 /// </summary>
117 public void SaveFile()
118 {
119 try
120 {
121 workBook.SaveAs(outPutFilePath, missing, missing, missing, missing, missing,
122 Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing);
123 }
124 catch
125 {
126 throw new Exception("保存至文件失败!");
127 }
128 finally
129 {
130 Dispose();
131 }
132 }
133
134 /// <summary>
135 /// 垃圾回收处理
136 /// </summary>
137 protected void GC()
138 {
139 if (null != app)
140 {
141 int generation = 0;
142 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
143
144 generation = System.GC.GetGeneration(app);
145 System.GC.Collect(generation);
146 app = null;
147 missing = null;
148 }
149 }
150
151 /// <summary>
152 /// 释放资源
153 /// </summary>
154 protected void Dispose()
155 {
156 workBook.Close(null, null, null);
157 app.Workbooks.Close();
158 app.Quit();
159
160 if (null != workSheet)
161 {
162 System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
163 workSheet = null;
164 }
165 if (workBook != null)
166 {
167 System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
168 workBook = null;
169 }
170 if (app != null)
171 {
172 int generation = 0;
173 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
174 generation = System.GC.GetGeneration(app);
175 System.GC.Collect(generation);
176 app = null;
177 missing = null;
178 }
179 }
180 }

通过ExcelHelper类提供的SetCells()和SaveFile()方法可以给Excel单元格赋值并保存到临时文件夹内。仅供参考。

3.调用

因为这里需要用到导出模板,所以需要先建立模板。具体如下:、

View Code
 1     /// <summary>
2 /// 导出数据
3 /// </summary>
4 protected void Export_Data()
5 {
6 int ii = 0;
7 //取得报表模板文件路径
8 string reportModelPath = HttpContext.Current.Server.MapPath("ReportModel/导出订单模板.csv");
9 //导出报表文件名
10 fileName = string.Format("{0}-{1}{2}.csv", "导出订单明细", DateTime.Now.ToString("yyyyMMdd"), GetRndNum(3));
11 //导出文件路径
12 string outPutFilePath = HttpContext.Current.Server.MapPath("Temp_Down/" + fileName);
13 //创建Excel对象
14 ExcelHelper excel = new ExcelHelper(reportModelPath, outPutFilePath);
15
16 SqlDataReader sdr = Get_Data();
17 while (sdr.Read())
18 {
19 ii++;
20 excel.SetCells(1 + ii, 1, ii);
21 excel.SetCells(1 + ii, 2, sdr["C_Name"]);
22 excel.SetCells(1 + ii, 3, sdr["C_Mtel"]);
23 excel.SetCells(1 + ii, 4, sdr["C_Tel"]);
24 excel.SetCells(1 + ii, 5, sdr["C_Province"]);
25 excel.SetCells(1 + ii, 6, sdr["C_Address"]);
26 excel.SetCells(1 + ii, 7, sdr["C_Postcode"]);
27 }
28 sdr.Close();
29 excel.SaveFile();
30 }

关于导出就简单写到这,另外下一节讲介绍如何通过这个类库上传Excel文件。

--------------------------------------------欢迎交流,转载请注明出处---------------------------------------------------------------------


 

作者: WILLPAN 发表于 2011-10-14 11:18 原文链接

评论: 6 查看评论 发表评论


最新新闻:
· iOS 5 总览(2011-10-14 14:11)
· Siri 的人格测试:与 Siri 的普鲁斯特问答。(2011-10-14 13:45)
· 力拼苹果 三星正开发下一代Bada系统(2011-10-14 13:44)
· iOS 5不完美越狱教程(含视频)(2011-10-14 13:41)
· 20个使用JavaScript内容滑动展示效果的Web设计(2011-10-14 13:39)

编辑推荐:最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用46

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [asp.net excel] 推荐:

Asp.net操作Excel更轻松

- Bloger - 博客园-首页原创精华区
今天先介绍一个关于导出数据的例子,以Excel为模板.  1.操作Excel的动态链接库(暂时没有下载地址,稍后提供). 2.建立操作动态链接库的共通类,方便调用. 18 ///ExcelHelper 的摘要说明. /// 获取或设置报表模板路径. //TODO: 在此处添加构造函数逻辑. /// 带参ExcelHelper构造函数.

如何提高ASP.NET性能

- Bloger - 博客园-首页原创精华区
如果您在ASP.NET中编写的代码,那么你需要通过以下几点,以确保良好的性能:. 你从ASPX页面调用非托管代码. 你有没有审查Machine.config中的设置吗. 使用下面的复习题,以评估您的代码使用ASP.NET缓存功能:. 检查您的网页,使用输出缓存,以确保数量变化有限制. 输出缓存页面太多的变化可以导致内存使用量的增加.

PHP导出excel

- syeye - scofield PHP开发-SEO SEM
最近做一个项目,其中涉及到了数据导成excel的功能. 后来使用了 开源的 PHPExcel  http://phpexcel.codeplex.com/ 目前最新版是1.7.6. PHPExcel 可以生成 .xls 和 .xlsx (office2007). 比如设置 excel的title,keywords,description.

Excel 数据分析

- - ITeye博客
用Excel做数据分析——直方图. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model

- wang - 老赵点滴 - 追求编程之美
这也是之前在珠三角技术沙龙上的示例之一,解决的是在ASP.NET MVC使用dynamic类型Model时遇到的一个真实问题. C# 4编译器支持dynamic类型,因此在编写页面模板的时候自然就可以把它作为视图的Model类型. 表现层的需求很容易改变,因此dynamic类型的Model可以减少我们反复修改强类型Model的麻烦,再配合匿名类型的使用,可谓是动静相宜,如鱼得水.

ASP.NET性能优化之构建自定义文件缓存

- Pei - 博客园-首页原创精华区
ASP.NET的输出缓存(即静态HTML)在.NET4.0前一直是基于内存的. 这意味着如果我们的站点含有大量的缓存,则很容易消耗掉本机内存. 现在,借助于.NET4.0中的OutputCacheProvider,我们可以有多种选择创建自己的缓存. 如,我们可以把HTML输出缓存存储到memcached分布式集群服务器,或者MongoDB中(一种常用的面向文档数据库,不妨阅读本篇http://msdn.microsoft.com/zh-cn/magazine/gg650661.aspx).

Asp.Net Mvc 带进度条大文件上传(附源码下载)

- Bloger - 博客园-首页原创精华区
    在Web开发中经常会遇到文件上传的功能,如果是小文件,很简单;如果遇到的客户需要上传几个G甚至几十G、几百G的文件,那么就出现问题了. 为了安全起见,Mvc的Config设置根本就不允许上传这么大的文件. 经过多次试验比较,我向朋友介绍一种简单易懂的方法:借助于Jquery的JqUploader控件.

Excel高级使用技巧

- demonhunterl - 互联网的那点事
如果直接输入“1/5”,系统会将其变为“1月5日”,解决办法是:先输入“0”,然后输入空格,再输入分数“1/5”. (2) 序列“001”的输入. 如果直接输入“001”,系统会自动判断001为数据1,解决办法是:首先输入“’”(西文单引号),然后输入“001”. 如果要输入“4月5日”,直接输入“4/5”,再敲回车就行了.

学做专业EXCEL图表

- X - 小蚊子乐园
《电脑爱好者》2011年10月版以特别策划的方式大篇幅刊登《谁说菜鸟不会数据分析》节选内容. 《谁说菜鸟不会数据分析》--基于通用的Excel工具,像小说一样通俗易懂的数据分析教程,现在  卓越   京东   当当   China-pub 上可订购. 谁说菜鸟不会数据分析--业内人士联合推荐.

Excel项目管理工具

- - CSDN博客研发管理推荐文章
版权所有,转载请注明出处: http://guangboo.org/2013/10/27/excel-project-management. Excel强大的表格功能在项目管理中同样具有大用处,作者通过在实践中实际运用Excel进行项目管理的经验,简单介绍Excel在项目管理中的应用. 本文主要介绍Excel如何做项目计划和项目进度跟踪,项目计划和项目跟踪是项目周期中最重要的环节,无论是几个月的小项目,还是几年的大项目,计划和进度始终是保证项目正常推进、按时交付的重要手段.