OleDb把excel文件作为数据源来读取,直接用Sql语句来操作数据,并且不需要安装Office Excel就可以使用,所以用OLEDB方式读取EXCEL的速度是非常快的。但是当Excel数据量很大时,会非常占用内存,当内存不够时会抛出内存溢出的异常,容易丢失数据,因为是Sql语句来操作数据的,所以灵活性较低,如果你处理的数据不大且无需复杂操作时可以使用OLEDB方式读写EXCEL。
首先我们引入以下模块:
using System.Data;
using System.Data.OleDb;
using System.IO;
然后在类中写如下方法即可成功链接Excel,
public string ExcelPath = @"C:\Users\Administrator\Desktop\test.xlsx";
public void getExcel(string ExcelPath)
{
if (File.Exists(ExcelPath))//判断文件是否存在
{
string strConn = "";
FileInfo file = new FileInfo(ExcelPath);//读取excel文件名
string fileType = file.Extension;//提取excel文件名后缀,判断文件名类型
//----------------------------获取Excel表格数据---------------------------
if (fileType == ".xls")
//读取“.xls”时使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + ExcelPath + ";Extended Properties=Excel 8.0";
else
//读取“.xlsx”时使用 "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + ExcelPath + ";Extended Properties=Excel 8.0";
OleDbConnection myCon = new OleDbConnection(strConn); //连接数据库
myCon.Open();//打开数据库
}
}
HDR=Yes,这代表第一行是标题,不做为数据使用,系统默认的是YES
IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
IMEX=2 时为“链接模式”,这个模式开启的 Excel 档案可同时支持“读写”用途。
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.OleDb;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
}
/// <summary>
/// 读取Excel文件并将其缓存到内存中
/// </summary>
/// <param name="Path"></param>
/// <returns></returns>
public string ExcelPath = @"C:\Users\Administrator\Desktop\test.xlsx";
public void ExcelToDS(string Path)
{
if (File.Exists(ExcelPath))
{
string strConn = "";
FileInfo file = new FileInfo(ExcelPath);//读取excel文件名
string fileType = file.Extension;//提取excel文件名后缀,判断文件名类型
if (fileType == ".xls")
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + ExcelPath + ";Extended Properties=Excel 8.0";
else
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + ExcelPath + ";Extended Properties=Excel 8.0";
OleDbConnection conn = new OleDbConnection(strConn); //连接数据库
conn.Open();//打开数据库
string strExcel = "";
strExcel = "select * from [客户排配计划$]";//定义Excel工作表单
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, conn);//从工作表中查询数据
DataSet DS = new DataSet(); //创建数据集对象
myCommand.Fill(DS, "table1");//填充数据集
}
}
}
}
欢迎关注本人的公众号:编程手札,文章也会在公众号更新