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


    一、在客戶端把數據導入到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();//結束
  • 相关阅读:
    微信小程序之自定义模态弹窗(带动画)实例
    微信小程序之底部弹框预约插件
    Android WiFi直连 双向通信
    基于SpringBoot的项目管理后台
    Android WiFi热点7.1以上版本适配
    Android蓝牙——HID开发
    命令行视频(ts/m3u8)下载工具 —— youtube-dl(ffmpeg 解码)
    cool 软件 —— Carnac(实时桌面显示按键)
    认识 ARM、FPGA
    scikit-learn 学习笔记-- Generalized Linear Models (三)
  • 原文地址:https://www.cnblogs.com/zhuor/p/282803.html
Copyright © 2020-2023  润新知