Aspx中导Excel

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

关于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中已经有了一个本地的副本,所以不存在冲突的问题,希望大家能够从中得到启发,从而定制出更科学的方法,当然,不要忘记分享哦!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航