先说明:内容有借鉴。
在网上找了很多很多资料,但是很多都是不知道引用的是什么? 看似函数 / 类型,实质又不是,真让人费劲。
本人借鉴,总结了一下。下图是获取到的测试数据。
一共 3 个方法,先截图显示
复制代码:
/// <summary>
/// 获取Excel数据 以DataTable形式返回
/// </summary>
/// <returns></returns>
public DataTable GetDataByExcel()
{
//实例 DataTable
DataTable dt = new DataTable();
//实例打开文件
OpenFileDialog openFile = new OpenFileDialog();
//仅仅显示:Excel文件类型
openFile.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx";
//选择 Excel 文件
if (openFile.ShowDialog() == DialogResult.OK)
{
//获取文件名(包含文件路径)
string path = openFile.FileName;
//动态取Excel表名
string tableName = GetExcelFirstTableName(path);
//查询
string sql = "Select * From [" + tableName + "]";
//获取数据集
dt = ExcelToDataSet(path, sql).Tables[0];
}
return dt;
}
/// <summary>
/// 动态取Excel表名
/// </summary>
/// <param name="fullPath">文件路径</param>
/// <returns></returns>
public static string GetExcelFirstTableName(string fullPath)
{
string tableName = null;
//判断是否存在
if (File.Exists(fullPath))
{
//@"Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + @";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
//此连接可以操作.xls与.xlsx文件。
//备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。
// "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。
//Microsoft.Ace.OleDb.12.0未安装,可以到下载2007 Office system 驱动程序: AccessDatabaseEngine2007_CHS.zip:
//如果出现报错,请下载安装: AccessDatabaseEngine2007_CHS.zip
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(
@"Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fullPath + @";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"))
{
//开启读取
conn.Open();
//获取名
tableName = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();
//释放读取资源
conn.Dispose();
//关闭连接
conn.Close();
}
}
return tableName;
}
/// <summary>
/// 返回Excel数据源
/// </summary>
/// <param name="filename">文件路径</param>
/// <param name="sql">TSql</param>
/// <returns>DataSet</returns>
public static DataSet ExcelToDataSet(string filename, string sql)
{
//读取文件连接
string strCon = @"Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filename + @";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'" ;
//字符串初始化
System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strCon);
//开启读取
myConn.Open();
//更新获取数据资源连接
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(sql, myConn);
//实例数据集
DataSet ds = new DataSet();
//填充数据集
myCommand.Fill(ds);
//释放读取资源
myConn.Dispose();
//关闭连接
myConn.Close();
//释放读取资源
myCommand.Dispose();
return ds;
}