C#操作Excel
来源:互联网 发布:手办童萌会 淘宝 编辑:程序博客网 时间:2024/05/29 04:06
有时,需要将软件中计算获得的数据导出保存到Excel,并支持将Excel中的数据导入到软件中,所以会利用C#操作Excel非常必要。
一、添加引用
要想用C#操作Excel,首先需要保证导入了Excel类库,具体操作如下:
解决方案选项卡下-->项目节点上右键-->添加引用-->.NET选项卡-->选择Microsoft.Office.Interop.Excel-->确定
二、接口类型
有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。
Jet 引擎可以访问 Office 97-2003,但不能访问 Office 2007。
ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。
另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。
Microsoft.ACE.OLEDB.12.0 安装文件:
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891
Excel 2003扩展名为.xls,Excel 2007扩展名为.xlsx
三、操作方法
读写Excel有两种方法:a)用OLEDB通过设置连接字符串像操作SqlServer一样读写Excel;
b)类似操作数组一样操作Excel单元格
3.1 OLEDB方式
3.1.1 连接Excel字符串
Jet引擎 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + ExcelPath + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";
ACE引擎 String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + ExcelPath + ";Extended Properties=Excel 12.0;HDR=Yes;IMEX=1";
其中Extended Properties 关键字设置 Excel 特定的属性,Excel 8.0 针对Excel2000、2003,Excel12.0针对Excel2007、2010;Data Source对应给出的ExcelPath为要连接的Excel表格的全路径;“HDR=Yes;”指示第一行中包含列名,而不是数据,缺省值为Yes;“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。
3.1.2 连接Excel重要对象
3.1.3 实例
下面为一个简单的Excel操作类,可以作为一个工具类,在需要用OLEDB方法操作Excel时调用。(只是简单版,可扩充完善)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.IO;
namespace Flow_Cytometry
{
public class ExcelOperating
{
OleDbConnection conn = null;
OleDbCommand cmd = null;
OleDbDataReader odr = null;
public ExcelOperating(string ExcelPath)
{
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + ExcelPath + ";Extended Properties=Excel 8.0;";//此处用的Excel2003
conn = new OleDbConnection(sConnectionString);
cmd = new OleDbCommand();
}
private OleDbConnection GetConn()//获取连接Excel对象,如果当前为未连接状态,这改为连接状态
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
public DataTable ExecuteQuery(string cmdText)//通过Sql语句cmdText,读取Excel中数据
{
DataTable dt = new DataTable();
cmd.Connection = GetConn();
cmd.CommandText = cmdText;
using (odr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(odr);
}
return dt;
}
public int ExcecuteNonQuery(string cmdText)//操作Excel,如创建、更改、插入、删除等
{
cmd.Connection = GetConn();
cmd.CommandText = cmdText;
return cmd.ExecuteNonQuery();
}
public void ConnClose()//关闭连接,在最后不再操作Excel时或关闭软件时调用
{
conn.Close();
}
}
}
前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 。但是实际上并不是这样的,好在处理的数据操作多时 修改, 插入, 删除,否则的话问题就有点打了,都是些基础的知识,但是很重要个人觉得有必要记下来。
ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。
例如用ExecuteNonQuery()方法执行create操作
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=PSDB;Integrated Security=SSPI");
string str = "CREATE TABLE aaa ( " +
"[ID] [int] IDENTITY (1, 1) NOT NULL , " +
"[BasicID] [int] NULL ," +
"[AdoptedName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptedSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptBirthday] [smalldatetime] NULL ," +
"[AdoptedType] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ," +
"[ApprTime] [smalldatetime] NULL ," +
"[Remark] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL " +
") ON [PRIMARY] ";
SqlCommand comm = new SqlCommand(str, conn);
int i = 10;
try
{
conn.Open();
i = comm.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
Response.Write(i.ToString());
如果执行成功的话 返回的值为-1,如果数据表已经存在的话返回异常:数据库中已存在名为 'aaa' 的对象。
- c#如何操作excel??
- C#操作Excel!
- C# 操作 Excel
- C#访问Excel操作
- C# 操作 Excel
- C# 操作 Excel
- C#操作Excel
- C#操作Excel
- C# 操作 Excel
- C#操作EXCEL
- C#对Excel操作
- c#操作EXcel
- C# 操作 Excel
- C#操作Excel文档
- C# 操作Excel
- C#操作MS Excel
- C#操作Excel
- .Net C# 操作Excel
- 关于如何在sql数据库里查询多次返回数据的做法
- android事件分发下
- android打开网页
- Implement Stack using Queues
- linux中安装easy_install(setuptools)
- C#操作Excel
- Java Classloader机制解析
- Spring框架包含的模块
- Hibernate延迟加载实现原理
- 深入浅出数据仓库中SQL性能优化之Hive篇
- 也谈下 .9.png (点9图)在android 中的使用
- 完全卸载VMware虚拟机简单介绍
- java虚拟机-类生命周期
- 安卓20150708