C#三种方法读取Excel:OleDb与DataSet操作详解
"在C#中读取Excel文件,主要有三种常见的方法,这里将介绍其中两种:使用OleDbConnection和DataAdapter进行读取,以及利用DataSet和DataTable进行数据导出。这两种方法对于处理Excel数据非常实用且易于理解。" 方法一:使用OleDbConnection和DataAdapter读取 首先,通过OleDbConnection连接Excel文件。代码示例中,`publicDataSetExcelToDS(string Path)`函数使用`Microsoft.Jet.OLEDB.4.0`提供程序连接到指定路径的Excel文件。连接字符串包括数据源路径、扩展属性(如"Excel8.0"),确保与Excel版本兼容。然后创建一个OleDbConnection对象并打开连接。 ```csharp string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "DataSource=" + Path + ";" + "ExtendedProperties=Excel8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); string strExcel = "select * from [sheet1$]"; // SQL查询语句,指定要读取的工作表 OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn); DataSet ds = new DataSet(); myCommand.Fill(ds, "table1"); // 填充DataSet,保存读取的数据 return ds; ``` 这段代码执行的是从名为"sheet1$"的工作表中读取所有列的操作,并将结果存储在一个名为"table1"的DataSet中。 方法二:利用DataSet和DataTable导出Excel 另一种方法是先将DataSet转换为DataTable,然后利用`Microsoft.Jet.OLEDB.4.0`将DataTable写入Excel。`public void DSToExcel(string Path, DataSet ods)`函数用于将传入的DataSet导出到Excel文件。首先创建一个连接字符串,然后使用OleDbConnection对象创建一个新的连接。 ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" + path1 + ";ExtendedProperties=Excel8.0"; OleDbConnection myConn = new OleDbConnection(strCon); // 需要检查DataSet中的数据是否适合写入Excel,可能需要根据实际情况调整 foreach (DataTable table in ods.Tables) { string tableName = table.TableName; // 将DataTable写入Excel,这里省略了具体的写入操作 // 使用WriteToExcel或者类似方法将DataTable中的数据插入到Excel工作表对应位置 } myConn.Close(); // 关闭连接 ``` 这部分代码展示了如何使用DataSet的DataTable结构将数据导出到Excel,具体写入操作可能需要进一步封装为独立的Excel操作函数,以确保数据格式正确无误。 总结起来,C#中读取和导出Excel文件通常依赖于OleDb技术,通过连接数据库驱动程序(如Jet或OpenXml)与Excel文件交互。这两种方法适用于简单的数据读取和导入任务,但对于大型或复杂的数据处理,可能需要考虑使用专门的Excel库或者使用Excel的XML格式(如XLSX)。在实际应用中,根据项目需求和性能考虑选择合适的方法。
把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 ( ) ;
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();
}
2.方法二:引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件
首先是Excel.dll的获取,将Office安装目录下的Excel.exe文件Copy到DotNet的bin目录下,cmd到该目录下,运行 TlbImp EXCEL.EXE Excel.dll 得到Dll文件。 再在项目中添加引用该dll文件.
//读取EXCEL的方法 (用范围区域读取数据)
private void OpenExcel(string strFileName)
{
object missing = System.Reflection.Missing.Value;
剩余5页未读,继续阅读
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展