首页 > 开发 > 综合 > 正文

C#在客戶端和服務端操作Excel文件

2024-07-21 02:17:34
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 一、在客戶端把數據導入到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();//結束

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表