惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

博客园 - chinaprg

干不下去了,准备出售公司了,有想要接手的吗 如何在3周让你的工资从5000+变10000+ 时隔6年后,我又回到博客园了 delphi关于小数位精度的问题 TExcelApplication,TExcelWorksheet,TExcelWorkbook用法 在客户处实施时几条常用运行命令备忘 堕落于游戏中的朋友可以看看了,打游戏偶尔还能搞点零花钱 路在何方 在b/s开发中经常用到的javaScript技术 C#中对注册表的操作 用C#实现生成PDF文档 用C# 实现C/S模式下软件自动在线升级[转载,原作者:貓撲] c# 公式计算问题 转帖(http://topic.csdn.net/t/20060313/11/4610686.html) 关于C#下写的Web Service 服务在Delphi下调用时的问题 用C#快速往Excel写数据 - chinaprg - 博客园 asp.net中Dbgrid更新和取消 命令同时出现的操作DEMO说明 - chinaprg - 博客园 常用javascript 常用javascript 网上看到的一篇颇有感触的文章,特意推荐给大家看看!
C#在客戶端和服務端操作Excel文件 - chinaprg - 博客园
chinaprg · 2007-07-10 · via 博客园 - chinaprg

一、在客戶端把數據導入到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();//結束