Aspx中導(dǎo)Excel
2024-05-04 11:06:23
供稿:網(wǎng)友
關(guān)于aspx中導(dǎo)excel,網(wǎng)上的方法比較的多,而最主要的是用com的控件,小弟以前也是用有如此之方法,不過嘛,這種方法有一些小小的缺點(diǎn),比如:必須要進(jìn)行某種復(fù)雜的注冊(cè),而且在效率上可能也會(huì)比較的慢一些,所以,小弟用了一種變通的方法,效果還不錯(cuò),不敢獨(dú)留,所以與大家共同分享之。
我們知道,在做web的程序中有一個(gè)非常大的好處就是只要在服務(wù)器上進(jìn)行配置,就可以不用考慮到客戶端的東東了,本程序的主要思想是,在服務(wù)器端進(jìn)行相關(guān)的操作生成excel文件,然后再由客戶端進(jìn)行下載。
由于直接生成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)//構(gòu)造函數(shù) 傳入?yún)?shù)為excel與文本路徑及轉(zhuǎn)化的dataset
{
_txtpath=txtpath;
_xlspath=xlspath;
_ds=ds;
}
public void pumptoexcel()//導(dǎo)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中的頭名寫進(jìn)文本流中,用制表符隔開
int itemcount=dt.rows.count;
int columncount=dt.columns.count;
for(int j=2;j<2+itemcount;j++)//將dataset中的每行寫進(jìn)文本流中,用制表符隔開
{
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();
}
}
}
一個(gè)簡(jiǎn)單而方便的導(dǎo)excel就完成了,當(dāng)然,有人會(huì)提到,如果一起導(dǎo)excel會(huì)不會(huì)有問題,經(jīng)本人測(cè)試,沒有任何問題發(fā)生,原因是,在導(dǎo)excel中已經(jīng)有了一個(gè)本地的副本,所以不存在沖突的問題,希望大家能夠從中得到啟發(fā),從而定制出更科學(xué)的方法,當(dāng)然,不要忘記分享哦!