用OleDbDataAdapter读取与写入EXCEL数据

用OleDbDataAdapter读取与写入EXCEL数据在以往使用Excel文件时,我一般认为是使用COM组件进行EXCEL文档的操作,这样写程序即费时又费力(因为EXCEL组件没有帮助提示),写的程序还是大篇的重复代码。为什么为这样那?因为我们总是把一个EXCEL文件当做系统文件进行操作。 如果把EXCEL文件当做一个数据源来进行数据的读取操作时,就可以使用开发环境提供的数据访问方法来访问EXCEL文件了。这样就可以使用开发环境的帮助(提示)即快速…

大家好,欢迎来到IT知识分享网。用OleDbDataAdapter读取与写入EXCEL数据

在以往使用Excel文件时,我一般认为是使用COM组件进行EXCEL文档的操作,这样写程序即费时又费力(因为EXCEL组件没有帮助提示),写的程序还是大篇的重复代码。为什么为这样那?因为我们总是把一个EXCEL文件当做系统文件进行操作。

  如果把EXCEL文件当做一个数据源来进行数据的读取操作时,就可以使用开发环境提供的数据访问方法来访问EXCEL文件了。这样就可以使用开发环境的帮助(提示)即快速又不费力的来读取和写入数据到EXCEL中。这样的代码即整洁又高效,同时代码还可以得到复用。

下面的例子是使用.NET对EXCEL文件的读取和写入

示例的应用环境是从其它一个或多个EXCEL中读取数据,然后将多个数据写入到一个汇总的EXCEL(汇总的EXCEL文件只有表头没有数据)。前提是EXCEL文件内的结构是一样的。


Excel文件的读取

public DataSet ExcelToDS(string Path)

{

 string strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” +”Data Source=”+ Path +”;”+”Extended Properties=Excel 8.0;”;

 OleDbConnection conn = new OleDbConnection(strConn);

 conn.Open();  

 string strExcel = “”;   

 OleDbDataAdapter myCommand = null;

 DataSet ds = null;

 strExcel=”select * from [sheet1$]”;

 myCommand = new OleDbDataAdapter(strExcel, strConn);

 ds = new DataSet();

 myCommand.Fill(ds,”table1″);   

 return ds;

}

对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到

 string strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” +”Data Source=”+ Path +”;”+”Extended Properties=Excel 8.0;”;

 OleDbConnection conn = new OleDbConnection(strConn);

 DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);

 string tableName=schemaTable.Rows[0][2].ToString().Trim();  


Excel文件的写入
public void DSToExcel(string Path,DataSet oldds)

{

 //先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构

 string strCon = ” Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =”+path1+”;Extended Properties=Excel 8.0″ ;

 OleDbConnection myConn = new OleDbConnection(strCon) ;

 string strCom=”select * from [Sheet1$]”;

 myConn.Open ( ) ;

 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;

 ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);

 //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。

 builder.QuotePrefix=”[“;     //获取insert语句中保留字符(起始位置)

 builder.QuoteSuffix=”]”; //获取insert语句中保留字符(结束位置)

 DataSet newds=new DataSet();

 myCommand.Fill(newds ,”Table1″) ;

 for(int i=0;i<oldds.Tables[0].Rows.Count;i++)

 {

  //在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added

  DataRow nrow=aDataSet.Tables[“Table1”].NewRow();

  for(int j=0;j<newds.Tables[0].Columns.Count;j++)

  {

   nrow[j]=oldds.Tables[0].Rows[i][j];

  }

  newds.Tables[“Table1”].Rows.Add(nrow);

 }

 myCommand.Update(newds,”Table1″);

 myConn.Close();

}

以上只是一个示例只能给大家提供一个关于操作EXCEL另一条思路,具体案例具体开发!!!!!!! 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/10483.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信