一、在客戶端把數據導入到excel文件步驟
1、創建excel application對象,打開或生成excel文件
//服務端創建stringbuilder對象
system.text.stringbuilder sb=new system .text .stringbuilder ();
//指定客戶端執行語言
sb.append ("<script language=vbscript>");
sb.append ("<!--/r/n");
sb.append ("dim xls/r/n");
//創建excel application對象
sb.append ("set xls=createobject(/"excel.application/")/r/n");
//打開excel文件
sb.append ("xls.workbooks.open(c://myexcel.xls)/r/n");
2、選定工作表,把數據導入到excel
//選定欲操作的excel表
sb.append ("xls.sheets(1).select/r/n");
//获得要操作数据表的行、列数
int rows=dt.rows.count,cols=dt.columns.count ;
//按行列将数据写入excel表
for (int j=brow+1;j<brow+cols ;j++)
for (int i=bcol;i<bcol+rows ;i++)
sb.append ("xls.sheets(1).cells(" +(j-1) + "," + (i) + ")=/"" + dt.rows[i-bcol][j-brow].tostring ().replace ("/"","'") + "/"/r/n");
3、显示excel文件
sb.append ("xls.visible=true/r/n");
4、釋放創建的excel application對象
sb.append ("set xls=nothing/r/n");
sb.append ("-->");
sb.append ("</script>");
5、將代碼寫到客戶端
this.page.registerclientscriptblock("",sb.tostring ());
二、在服務端操作excel文件
服務端操作excel文件,是把excel文件看作數據庫,把excel工作表當作數據表
1、創建連接並打開連接
protected system.data .oledb.oledbconnection dbcnn;
cnnstr="provider=microsoft.jet.oledb.4.0;extended properties=/"excel 8.0;hdr=yes;/";data source=c://myexcel.xls”;
dbcnn=new oledbconnection (cnnstr);
dbcnn.open ();
2、創建oledbcommand對象用來操作excel文件
protected system.data .oledb .oledbcommand dbcmd;
dbcmd=new oledbcommand();
dbcmd.connection =dbcnn;
3、操作excel文件
//获得要操作数据表的行、列数
rows=dt.rows.count ;
cols=dt.columns.count-1 ;
//按行列将数据写入excel文件sheet1工作表
for(int i=0;i<rows;i++)
{
olestr=" insert into [sheet1$] values(";
for(int j=0;j<cols;j++)
olestr=olestr+"'"+dt.rows[i][j].tostring ()+"',";
olestr+="'"+convert.todecimal (dt.rows[i][cols].tostring ())+"')";
dbcmd.commandtext =olestr;
dbcmd.executenonquery ();
}
4、釋放oledbcommand對象、關閉連接
dbcmd.dispose ();
dbcnn.close ();
5、可操作的sql語句
//建立名為punchdate的工作表,並指明子段類型。
//創建工作表好處是可指定子段類型,否則都以字符串導出
create table punchdate(mno char(5), punchnum float)
//插入新數據
insert into punchdate(mno,punchnum) values(‘09’,9000)
//更新數據
update punchdate set punchnum=8000 where mno=’09’
6、不可操作的sql語句
delete from punchdate
7、注意連接子串
//hdr=yes 説明工作表第一行為子段名
"provider=microsoft.jet.oledb.4.0;extended properties=/"excel 8.0;hdr=yes;/";data source=c://myexcel.xls”
//hdr=no 説明工作表沒有含子段名的行
"provider=microsoft.jet.oledb.4.0;extended properties=/"excel 8.0;hdr=no;/";data source=c://myexcel.xls”
8、注意對web.config的設置
刪除以下項目
<identity impersonate="true" />
或者這樣設置
<identity impersonate="false" />
三、兩種方法的優缺點
操作excel文件方法
優點
缺點
客戶端
數據導入到excel文件時,很靈活,可將數據填入任意指定的存儲格,定位到任意位置
1、在客戶端生成activex控件,要將站點設置成可信站點或對ie進行安全設置(降低了ie的安全性)
2、對調用的excel模板文件,用戶要有權讀寫
3、在客戶端寫excel文件速度比較慢
服務端
1、對調用的excel模板文件,只要asp.net有權讀寫即可
2、在服務端寫excel文件速度比較快
3、不要對ie進行特別設置
對操作的文件只能當作數據庫操作,不夠靈活
四、流输出
原理:把數據填充到 datagrid,然後把datagrid内容放到一個輸出流裏面,並指定輸出流類型為 excel
system.io .stringwriter sw =new system.io.stringwriter();//字符串流
system.web .ui .htmltextwriter hw =new system.web.ui.htmltextwriter(sw);//html 流,用字符串流作參數
dg.rendercontrol(hw);//把datagrid 流變成字符串流。
response.contenttype ="application/vnd.ms-excel";//定義輸出流類型為 excel 流。關鍵語句。
response.contentencoding=system.text.encoding.getencoding("big5");//指定編碼類型為大五碼
response.write(sw.tostring());//輸出流 response.end();//結束
新闻热点
疑难解答