C#操作Excel(创建、打开、读写、保存)几种方法的总结
2015-08-15 00:39
831 查看
在开始讨论之前,先把相关的一些网上资源罗列一下,其中大部分来自MSDN:
MSDN: 如何使用 Visual C# 2005
或 Visual C# .NET
向 Excel
工作簿传输数据
http://support.microsoft.com/kb/306023/zh-cn
MSDN: 从 .NET
开发人员的角度理解 Excel
对象模型
http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx
如何:使用 COM Interop
创建 Excel
电子表格(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx
Office XP 主互操作程序集入门
http://msdn.microsoft.com/zh-cn/library/aa201322(office.11).aspx
如何通过 Visual C#
使 Excel
自动执行操作以使用数组来填充或获取某区域中的数据
http://support.microsoft.com/kb/302096/zh-cn
如何在 Microsoft VisualC# .NET
中实现 Microsoft Excel
自动化
http://support.microsoft.com/kb/302084/zh-cn
如何使用 Visual C# .NET
处理 Excel
事件
http://support.microsoft.com/kb/823981/zh-cn
C#中创建、打开、读取、写入、保存Excel的一般性代码
http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html
如何使用 ASP.NET、ADO.NET
和 Visual C# .NET
查询和显示 Excel
数据
http://support.microsoft.com/kb/306572/zh-cn
在 Visual C#.NET
中使用 GetOleDbSchemaTable
从 Excel
如何:检索元数据
http://support.microsoft.com/kb/318452/zh-cn
与 XML
一起使用 Visual Basic
和 ASP 生成 Excel 2003
工作簿
http://msdn.microsoft.com/zh-cn/library/aa203722(office.11).aspx
下面开始就各种方法逐步说明其具体的Excel操作过程:
1.通过ADO.NET数据库连接方式
Microsoft Jet 提供程序用于连接到 Excel 工作簿。在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\MyExcel.xls;Extended Properties=""Excel8.0;HDR=Yes;IMEX=1""
注意,Extended Properties 所需的双引号必须还要加双引号。
使用ADO.NET打开、读取并关闭代码示例如下:
using System.Data.OleDb;
using System.Data;
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]",objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
//将Excel中数据填充到数据集
objAdapter1.Fill(objDataset1, "XLData");
objConn.Close();
从上面可以看出,使用ADO.NET可将Excel当作普通数据库,使用SQL语句来操作。
通过ADO.NET获取Excel文件的各Sheet名称,可使用元数据方式:
String sConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;"+
"Extended Properties=Excel8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
cn.Open();
DataTable tb = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow row in tb.Rows)
{
//遍历弹出各Sheet的名称
MessageBox.Show(row["TABLE_NAME"]);
}
关于使用ADO.NET创建并写入Excel文件与普通数据库操作极为类似,参见以下代码:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source=c:/test.xls;"+
"Extended Properties=Excel8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
string sqlCreate = "CREATE TABLE TestSheet ([ID] INTEGER,[Username]VarChar,[UserPwd] VarChar)";
OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
//创建Excel文件:C:/test.xls
cn.Open();
//创建TestSheet工作表
cmd.ExecuteNonQuery();
//添加数据
cmd.CommandText = "INSERT INTO TestSheetVALUES(1,'elmer','password')";
cmd.ExecuteNonQuery();
//关闭连接
cn.Close();
关于SQL语句中用到的数据类型,请查看System.Data.OleDb.OleDbType枚举。
至此,使用ADO.NET打开、创建、读取、写入、保存并退出已全部实现,总结起来,与数据库操作基本无异,很简单。这种方式的好处就是通用性强,将Excel中内容看作数据表,读取操作简单可靠,适合内容规范的Excel表格的数据读取。缺点是当Excel结构复杂,如含合并单元等时,无法正确读取,甚至出现不可预知的异常。
2.通过Excel对象模型的“自动化”操作
3.通过中间数据格式间接操作
4.使用第三方控件
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器
- c#美味: 微软图表控件MSChart安装部署
- 编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别
- 编程:C#调用Python模块
- C#删除文件和文件夹到回收站
- 编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式
- 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果
- 编写高质量代码改善C#程序的157个建议——建议25:谨慎集合属性的可写操作
- C# DataSet 的使用
- C#抓取数据、正则表达式+线程池初步运用
- 快速上手之 C# 操作Directory类
- C# 通过串口发送短信
- 恶意程序敲诈者解析
- C# axWindowsMediaPlayer制作播放器
- C# DataGridView显示行号方法。
- 编写高质量代码改善C#程序的157个建议——建议24:迭代器应该是只读的
- C# odbc
- 数往知来C#之面向对象准备〈一〉
- 编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类
- 编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全