0
点赞
收藏
分享

微信扫一扫

C#中对Excel的操作 使用Excel公式,导入导出数据库等


Excel表格文档由于其简单易用,普遍应用于不少单位或部门,因而在编写应用程序过程中,有时会需要对Excel文档进行操作,最简单的情况通常有两种:(1)需要获取文档中一些单元格的值;(2)将文档导入至数据库。


1).在操作Excel文档之前,需要添加对Excel对象库的引用:

引用—COM—Microsoft Excel 11.0 Object Library(版本号可能不同)


2).以下代码示意打开一个已有的Excel文档的第一个sheet页,获取单元格“B 1 ” 的内容,并判断其值是否为“my”:


private   void  ReleaseCOM( object  pObj)

{



有了该方法,则只要在步骤2)代码之后添加以下代码,就可以完成对资源的释放:


private   void  Operate( string  pFileName)



4).


string   count  =  sh.UsedRange.Rows.Count.ToString();

=  sh.get_Range( " B100 " ,Missing.Value);

=   " =SUM(IF(FREQUENCY(MATCH(B1:B "   +  count  +   " ,B1:B "   +  count  +   " ,0),MATCH(B1:B "   +  count  +   " ,B1:B "   +  count  +   " ,0))>0,1)) " ;


5).


private  DataTable LoadExcel( string  pPath)

{


private   string  GetExcelSheetName( string  pPath)

{



(“string sql = "select * from [" + sheetName.Replace('.', '#') + "$]";”如果sheet页名称中含有“.”,则要将其替换为“#”,具体原因,没研究出来-_-。另外贴一张界面截图:)

C#中对Excel的操作 使用Excel公式,导入导出数据库等_文档_120


6).关于从Excel导入数据,网上应该有很多例子,这里补充一个关于数据导入时的效率问题。最初在从Excel导入数据到MySql中时,当文件达到50000行时,逐行导入花了10余分钟的时间。大量执行插入操作,逐条执行很慢原因可能在于:

(1)每执行一条插入语句,客户端需要与服务器交互一次,这要有代价;

(2)一些数据库对每一条插入操作都执行事务,这也要有代价

所以在大量执行插入操作时,应该尽量先多个insert语句拼接好,例如每次拼接好200个insert语句,然后再一次执行它,这样可以大幅提高效率。

从Excel导入数据,可以先使用ODBC,以select查询时使用“[sheet页名称$]”作为“表名”,将数据以datatable形式载入到内存中,之后的事就比较简单了,可以根据datatable逐行构造insert语句,然后插入到目标数据库中:

基于 Excel 中的函数可以编辑出相当复杂的公式,有时候在处理 Excel 文档时,希望使用 Excel 中的公式,以下结合 FREQUENCY , MATCH 函数对 B 列计算 distinct count ,将其写入 B100 单元格(假定有数据的行不超过 100 行):


private   void  Operate( string  pFileName)

{




3).


不少人在打开Excel应用后,对如何在使用完成后释放它大感头痛,在网上我找到一种方法,经过实验证明是OK的:

举报

相关推荐

0 条评论