關於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中已經有了一個本地的副本,所以不存在衝突的問題,希望大家能夠從中得到啟發,從而定制出更科學的方法,當然,不要忘記分享哦!