ASP生成Excel文件方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASP生成Excel文件方法
ASP生成Excel文件方法
方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载优点:
1、可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载。

2、也是因为生成了文件,所以占用了服务器的空间,但是可以把文件名存放到数据库,再次给客户下载的时候不需要重复生成文件。

3、csv文件是文本文件,逗号隔开字段,回车隔开行,易于数据导入导出。

实现方法:
SqlConnection conn=new SqlConnection("conn"]);
SqlDataAdapter da=new SqlDataAdapter("select*from tb1",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table1");
DataTable dt=ds.T ables["table1"];
string name="downloadurl"].ToString()+"yyyyMMdd")+new Random(".csv";//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数
FileStream fs=new
FileStream(name,FileMode.Create,FileAccess.Write);
StreamWriter sw=new StreamWriter(fs,"gb2312"));
sw.WriteLine("自动编号,姓名,年龄");
foreach(DataRow dr in dt.Rows)
{
sw.WriteLine(dr["ID"]+","+dr["vName"]+","+dr["iAge"]);
}
sw.Close();
Response.AddHeader("Content-Disposition","attachment;
filename="+Server.UrlEncode(name));
Response.ContentType="application/ms-excel";//指定返回的是一个不能被客户端读取的流,必须被下载
Response.WriteFile(name);//把文件流发送到客户端
Response.End();
方法二:导出到csv文件,不存放到服务器,直接给浏览器输出文件流优点:
1、随时生成,不需要占用资源
2、可以结合身份认证
3、同样利于数据交换
实现方法:
SqlConnection conn=new SqlConnection("conn"]);
SqlDataAdapter da=new SqlDataAdapter("select*from tb1",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table1");
DataTable dt=ds.T ables["table1"];
StringWriter sw=new StringWriter();
sw.WriteLine("自动编号,姓名,年龄");
foreach(DataRow dr in dt.Rows)
{
sw.WriteLine(dr["ID"]+","+dr["vName"]+","+dr["iAge"]);
}
sw.Close();
Response.AddHeader("Content-Disposition","attachment;
filename=test.csv");
Response.ContentType="application/ms-excel";
Response.ContentEncoding="GB2312");
Response.Write(sw);
Response.End();
对方法一,二补充一点,如果你希望导出的是xls文件分隔符用\t 就可以了,不要用逗号
代码修改如下:
sw.WriteLine("自动编号\t姓名\t年龄");
foreach(DataRow dr in dt.Rows)
{
sw.WriteLine(dr["ID"]+"\t"+dr["vName"]+"\t"+dr["iAge"]);
}
另外,修改输出的文件扩展名为xls即可。

方法三:从datagrid导出html代码,生成excel文件,给客户端下载优点:
1、有固定的格式,样子好看(datagrid的样子)
局限性:
1、不适合数据交换,里面有html代码,比较乱,没有固定格式
2、datagrid不能有分页、排序等,否则出错
实现方法:
Response.Clear();
Response.Buffer=false;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=test.xls");
Response.ContentEncoding="GB2312");
Response.ContentType="application/ms-excel";
this.EnableViewState=false;
oStringWriter=new ;
oHtmlTextWriter=new ;

Response.Write(oStringWriter.ToString());
Response.End();
在这里说明一点:有的网友反映代码出现"没有dr["id"]"之类的错误,这个代码是按照我的数据结构来写的,到时候相关的字段要换成你自己的才是。

还有就是如果文件名需要中文的话,这么修改
Response.AddHeader("Content-Disposition","attachment;filename="+"中文",".xls");
目录
一、环境配置
二、ASP对Excel的基本操作
三、ASP操作Excel生成数据表
四、ASP操作Excel生成Chart图
五、服务器端Excel文件浏览、下载、删除方案
六、附录
正文
一、环境配置
服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即:
1.Win9x+PWS+Office
2.Win2000 Professional+PWS+Office
3.Win2000 Server+IIS+Office
目前笔者测试成功的环境是后二者。

Office的版本没有特殊要求,考虑到客户机配置的不确定性和下兼容特性,建议服务器端Office版本不要太高,以防止客户机下载后无法正确显示。

服务器端环境配置还有两个偶然的发现是:
1.笔者开发机器上原来装有金山的WPS2002,结果Excel对象创建始终出现问题,卸载WPS2002后,错误消失。

2.笔者开发ASP代码喜欢用FrontPage,结果发现如果FrontPage打开(服务器端),对象创建出现不稳定现象,时而成功时而不成功。

扩展考察后发
现,Office系列的软件如果在服务器端运行,则Excel对象的创建
很难成功。

服务器端还必须要设置的一点是COM组件的操作权限。

在命令行键入"DCOMCNFG",则进入COM组件配置界面,选择Microsoft Excel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。

保存完毕后重新启动服务器。

客户端的环境配置没发现什么特别讲究的地方,只要装有Office 和IE 即可,版本通用的好象都可以。

二、ASP对Excel的基本操作
1、建立Excel对象
set objExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=false不显示警告
2、新建Excel文件
set objExcelBook=objExcelApp.ActiveWorkBook set objExcelSheets=objExcelBook.Worksheets set
objExcelSheet=objExcelBook.Sheets(1)
3、读取已有Excel文件
strAddr=Server.MapPath(".")
"\Templet\Table.xls")
set objExcelBook=objExcelApp.ActiveWorkBook set objExcelSheets=objExcelBook.Worksheets set
objExcelSheet=objExcelBook.Sheets(1)
4、另存Excel文件
objExcelBook.SaveAs strAddr&"\Temp\Table.xls"
5、保存Excel文件
objExcelBook.Save(笔者测试时保存成功,页面报错。

)
6、退出Excel操作
objExcelApp.Quit一定要退出
set objExcelApp=Nothing
三、ASP操作Excel生成数据表
1、在一个范围内插入数据
objExcelSheet.Range("B3:
k3").Value=Array("67","87","5","9","7","45","45","54","54","1 0")
2、在一个单元格内插入数据
objExcelSheet.Cells(3,1).Value="Internet Explorer"
3、选中一个范围
4、单元格左边画粗线条
5、单元格右边画粗线条
6、单元格上边画粗线条
7、单元格下边画粗线条
8、单元格设定背景色
9、合并单元格
10、插入行
11、插入列
四、ASP操作Excel生成Chart图
1、创建Chart图
2、设定Chart图种类
注:二维折线图,4;二维饼图,5;二维柱形图,51 3、设定Chart图标题
"A test Chart"
4、通过表格数据设定图形
objExcelSheet.Range("A1:k5"),1 5、直接设定图形数据(推荐) "=""333"""
"={1,4,5,6,2}"
6、绑定Chart图
1
7、显示数据表
8、显示图例
五、服务器端Excel文件浏览、下载、删除方案
浏览的解决方法很多,"Location.href=","Navigate",
"Response.Redirect"都可以实现,建议用客户端的方法,原因是给服务器更多的时间生成Excel文件。

下载的实现要麻烦一些。

用网上现成的服务器端下载组件或自己定制开发一个组件是比较好的方案。

另外一种方法是在客户端操作Excel组件,由客户端操作服务器端Excel文件另存至客户端。

这种方法要求客户端开放不安全ActiveX控件的操作权限,考虑到通知每个客户将服务器设置为可信站点的麻烦程度建议还是用第一个方法比较省事。

删除方案由三部分组成:
A:同一用户生成的Excel文件用同一个文件名,文件名可用用户ID号或SessionID号等可确信不重复字符串组成。

这样新文件生成时自动覆盖上一文件。

B:在Global.asa文件中设置Session_onEnd事件激发时,删除这个用户的Excel暂存文件。

C:在Global.asa文件中设置Application_onStart事件激发时,删除暂存目录下的所有文件。

注:建议目录结构\Src代码目录\Templet模板目录\Temp暂存目录
六、附录
出错时Excel出现的死进程出现是一件很头疼的事情。

在每个文件前加上"On Error Resume Next"将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到"Application.Quit",保证每次程序执行完不留下死进程。

相关文档
最新文档