C#编程读取与写入Excel的实用方法
"这篇文章主要介绍了如何在C#中读取Excel文件的方法,包括使用OleDb进行数据读取的示例代码。" 在C#开发中,处理Excel文件是常见的任务,尤其是在数据分析、报表生成或者数据导入导出的场景下。本篇文章主要探讨了通过OleDb数据提供程序来读取Excel文件的方法。 首先,我们可以使用OleDbConnection对象连接到Excel文件。在创建连接字符串时,需要指定提供程序(这里是Microsoft.Jet.OLEDB.4.0),数据源(即Excel文件的路径),以及扩展属性(表明是Excel 8.0格式,对应的是Excel 2003及更早版本)。例如: ```csharp string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "DataSource=" + Path + "; " + "ExtendedProperties=Excel8.0;"; ``` 接着,通过打开连接,可以使用OleDbDataAdapter和SQL查询语句从Excel工作表中获取数据。比如,以下代码读取名为“sheet1”的工作表中的所有数据: ```csharp string strExcel = "select * from [sheet1$]"; OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn); DataSet ds = new DataSet(); myCommand.Fill(ds, "table1"); ``` 值得注意的是,工作表名需要以方括号包围,如`[sheet1$]`,其中 `$` 表示整个工作表,而不是特定的行或列。 另外,如果你不确定Excel文件中的工作表名称,可以通过`GetOleDbSchemaTable`方法获取表格信息。这样可以动态地获取所有工作表的名字并进行操作: ```csharp DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); string tableName = schemaTable.Rows[0][2].ToString().Trim(); // 获取第一个工作表的名称 ``` 此外,文章还提到了如何将DataSet对象写回Excel文件。这同样使用OleDbConnection和OleDbDataAdapter,但这次是使用`Update`方法将数据写入Excel: ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" + path1 + ";ExtendedProperties=Excel8.0;"; OleDbConnection myConn = new OleDbConnection(strCon); OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(myAdapter); myAdapter.Update(ds, "table1"); ``` 这种方法虽然简单实用,但它依赖于Jet数据库引擎,可能不支持Excel 2007及更高版本的XLSX文件。对于这些新格式,推荐使用Microsoft.ACE.OLEDB.12.0提供程序。如果需要处理大量数据或复杂的Excel功能,可以考虑使用专门的库,如EPPlus或NPOI。 C#通过OleDb读取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 ( ) ;
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页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全