Aspx中导Excel
2024-05-04 11:06:23
供稿:网友
关于aspx中导excel,网上的方法比较的多,而最主要的是用com的控件,小弟以前也是用有如此之方法,不过嘛,这种方法有一些小小的缺点,比如:必须要进行某种复杂的注册,而且在效率上可能也会比较的慢一些,所以,小弟用了一种变通的方法,效果还不错,不敢独留,所以与大家共同分享之。
我们知道,在做web的程序中有一个非常大的好处就是只要在服务器上进行配置,就可以不用考虑到客户端的东东了,本程序的主要思想是,在服务器端进行相关的操作生成excel文件,然后再由客户端进行下载。
由于直接生成excel文件比较的慢,所以,我先生成的是txt文本,然后保存为excel文件。话不多说,先show一下我的代码。
using system;
using system.data;
using system.io;
using system.web;
namespace toexceldsns
{
public class toexcelds
{
private string _txtpath;//txt文本的路径
private string _xlspath;//excel的路径
private dataset _ds;
public toexcelds(string xlspath,string txtpath,dataset ds)//构造函数 传入参数为excel与文本路径及转化的dataset
{
_txtpath=txtpath;
_xlspath=xlspath;
_ds=ds;
}
public void pumptoexcel()//导excel
{
datarow[] dr=_ds.tables[0].select("1=1");
datatable dt=_ds.tables[0];
streamwriter sw=new streamwriter(_txtpath,false,system.text.encoding.default);//文本流
string tmp="";
foreach(datacolumn dc in dt.columns)
{
tmp+=dc.caption+"/t";
}
sw.writeline(tmp+"/a");//将dataset中的头名写进文本流中,用制表符隔开
int itemcount=dt.rows.count;
int columncount=dt.columns.count;
for(int j=2;j<2+itemcount;j++)//将dataset中的每行写进文本流中,用制表符隔开
{
tmp="";
for(int k=1;k<columncount+1;k++)
{
tmp+=dr[j-2][k-1].tostring()+"/t";
}
sw.writeline(tmp+"/a");
}
sw.flush();
file.copy(_txtpath,_xlspath,true);//将txt保存为excel
sw.close();
}
}
}
一个简单而方便的导excel就完成了,当然,有人会提到,如果一起导excel会不会有问题,经本人测试,没有任何问题发生,原因是,在导excel中已经有了一个本地的副本,所以不存在冲突的问题,希望大家能够从中得到启发,从而定制出更科学的方法,当然,不要忘记分享哦!