c#操作Excel
Excel学习笔记
前言
例如:之前在网上查询了很多关于访问Excel的资料都介绍少的比较笼统,所以在这里记录一下使用的两种方式进行对比分析一、连接方式
1、OLEDB
OLEDB(Object Linking and Embedding,Database,又称为OLE DB或OLE-DB),一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).
优点:读取Excel速度相对调用COM组件来讲是非常的快,不需要安装Office Excel就可以使用。
缺点:对于Excel本身一些复杂的逻辑,如单元格合并,单元格着色等无法支持。
2、com组件
优势:可以非常灵活的读取Excel中的数据,而且使用方式很丰富,基本上凡是打开Office Excel软件能够用鼠标点击完成的事,使用VSTO调用COM组件都能完成,而且可以调用Excel自身带的宏方法等。
缺点:机器上必须安装Excel,最重要的一点因为是基于单元格方式读取的,所以数据很慢。
二、组成
1. OLEDB成员
OLEDB标准中定义的新概念----OLEDB将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称。例如:数据提供者(Data Provider)是指提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。
- Data Providers 数据提供者
凡是透过OLEDB将数据提供出来的,就是数据提供者。
注意:对于新的Excel格式不能使用老的provider
2003格式的可以使用Microsoft.JET.OLEDB.4.0或者Microsoft.Ace.OLEDB.12.0
2007以后格式只能使用Microsoft.Ace.OLEDB.12.0
扩展属性參数:
Excel 8.0 对于Excel 97以上到2003版本号都用Excel 8.0,
2007或2010的都用Extended Properties=Excel 12.0 - Data Consumers 数据使用者
凡是使用OLEDB提供数据的程序或组件,都是OLEDB的数据使用者。 - HDR (HeaDer Row) 列标题字段
HDR=NO 即无字段
HDR=Yes 即有字段 - IMEX 是否强制转换为文本
0 : is Export mode 输出模式
1 : is Import mode 输入模式
2 : is Linekde mode(full update capabilities) 链接模式(完全更新能力)
2.COM组件
- Application:应用程序
- Workbooks:工作薄
- Workbook
- Worksheets:工作单
- Worksheet
三、连接Excel
##1、OLEDB连接
读取Excel代码如下(示例):
public static DataSet ExcelToDataSet(string path, string tableName = "table1")
{
DataSet ds = new DataSet();
int lastIndex = path.LastIndexOf(".");
string txtType = path.Substring(lastIndex, path.Length - lastIndex );
string strConn;
if (txtType == ".xls")
{
strConn = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=Excel 8.0 HDR=Yes;");
}
else
{
strConn= $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=Excel 12.0 HDR=No;";
}
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = string.Format($"select * from [Sheet1$]");//自动获取第一个sheet1页名称必须添加$
OleDbDataAdapter myAdapeter = new OleDbDataAdapter(strExcel, strConn);
try
{
myAdapeter.Fill(ds, tableName);
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
conn.Close();
}
return ds;
}
创建并Excel代码如下(示例):
public static object DataSetToExcel(string path, string tableName = "table1")
{
string strConn;
int lastIndex = path.LastIndexOf(".");
string txtType = path.Substring(lastIndex, path.Length - lastIndex);
if (txtType == ".xls")
{
strConn = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties='Excel 8.0;'";
}
else
{
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0 xml'";
}
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
using (OleDbCommand mcmd = conn.CreateCommand())
{
string mCeateTable = $"Create table {tableName} ([ID] varchar,[name] varchar ,[age] varchar)";
mcmd.CommandText = mCeateTable;
mcmd.ExecuteNonQuery();
string code = $"insert into [{tableName}$] (ID,name,age)values('1','yantai','12')";
mcmd.CommandText = code;
mcmd.ExecuteNonQuery();
conn.Close();
}
return true;
}
链接: https://download.csdn.net/download/wanxiweilai/14045919.
## 2、COM组件连接 创建Excel并设定格式、代码如下:
public static void CreateExcel(string path )
{
app.SheetsInNewWorkbook = 3;
Workbook book = app.Workbooks.Add();
Worksheet sheet = book.Worksheets[1];
sheet.Name = "hello";
sheet.Cells[1, 2]="123";
Range r = sheet.get_Range("a1", "b2");
r.Merge(Missing.Value);
r.Font.Bold = true;
r.HorizontalAlignment =XlHAlign.xlHAlignCenter;
r.VerticalAlignment = XlHAlign.xlHAlignCenter;
Worksheet sheet1 = book.Worksheets[2];
sheet1.Name = "world";
sheet1.Cells[1, 2] = "123";
sheet1.Rows[1].Font.UnderLine= true;
book.SaveAs(path);
book.Close();
app.Quit();
}
链接: https://download.csdn.net/download/wanxiweilai/14045919.
总结
以上内容就是今天学习的OLEDB的所有学习资料,通过以上操作可以对Excel进行一些简单的操作,总结的目的是防止以后遗忘在此记录一下。后期继续更新来源:oschina
链接:https://my.oschina.net/u/4329429/blog/4889247