读取excel中的表格到datatable
2015-08-31 11:11
225 查看
留着自己以后参考
/// <summary>
/// 获取Excel的内容
/// 备注:把Excel读取到DataTable之后
/// 的列标题
/// </summary>
/// <param name="excelPath"></param>
/// <param name="HasColumn"></param>
/// <returns></returns>
public static System.Data.DataTable GetExcelTable(string excelPath, bool HasColumn)
{
try
{
//打开Excel连接
string connString = "";
OleDbConnection conn = null;
if (HasColumn == true)
{
conn = OpenExcelEx(excelPath, out connString); //连接
}
else
{
conn = OpenExcel(excelPath, out connString); //连接
}
//读取Excel
List<string> lstName = GetFirstSheetNames(connString);
System.Data.DataTable dtTable = null;
foreach (string strSheetName in lstName)
{
string strSql = "select * from [" + strSheetName + "]";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(strSql, conn); //查询
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
System.Data.DataTable table = dtSet.Tables[0];
//table.Columns[0].ColumnName = table.Rows[0][table.Columns[0]].ToString();
//table.Rows.RemoveAt(0);
dataAdapter.Dispose();
if (table.Columns.Count > 1)
{
dtTable = table;
break;
}
}
conn.Close(); //cql 进程就不会被占用
return dtTable;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 获取Excel的内容
/// 备注:把Excel读取到DataTable之后,默认把Excel的第一行作为Datatable
/// 的列标题
/// </summary>
/// <param name="excelPath"></param>
/// <param name="HasColumn">是否把一行做表头</param>
/// <returns></returns>
public static System.Data.DataTable GetExcelTableEX(string excelPath, bool HasColumn)
{
try
{
//打开Excel连接
string connString = "";
OleDbConnection conn = null;
if (HasColumn == true)
{
conn = OpenExcelEx(excelPath, out connString); //连接
}
else
{
conn = OpenExcel(excelPath, out connString); //连接
}
//读取Excel
List<string> lstName = GetFirstSheetNames(connString);
System.Data.DataTable dtTable = null;
foreach (string strSheetName in lstName)
{
string strSql = "select * from [" + strSheetName + "]";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(strSql, conn); //查询
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
System.Data.DataTable table = dtSet.Tables[0];
foreach (DataColumn col in table.Columns)
{
col.ColumnName = table.Rows[0][col].ToString();
}
table.Rows.RemoveAt(0);
dataAdapter.Dispose();
if (table.Columns.Count > 1)
{
dtTable = table;
break;
}
}
conn.Close(); //cql 进程就不会被占用
return dtTable;
}
catch (Exception ex)
{
return null;
}
}
private static List<string> GetFirstSheetNames(string connectionString)
{
List<string> lstName = new List<string>();
using (OleDbConnection connection = new
OleDbConnection(connectionString))
{
connection.Open();
System.Data.DataTable schemaTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
foreach (DataRow row in schemaTable.Rows)
{
string tableName = row[2].ToString().Trim();
lstName.Add(tableName);
}
connection.Close();
}
return lstName;
}
#region 打开Excel连接 ADO.Net
/// <summary>
/// 打开Excel文件,把一行做表头
/// 解决03版本和07版本Excel的访问驱动不兼容得问题
/// </summary>
/// <param name="excelPath">Excel文件全路径</param>
/// <param name="strConn">连接字符串</param>
/// <returns></returns>
public static OleDbConnection OpenExcelEx(string excelPath, out string strConn)
{
OleDbConnection conn = null;
//先用03版Excel连接方式
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn))
{
//在尝试用07的连接方式
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn)) return null;
}
return conn;
}
/// <summary>
/// 打开Excel文件
/// 解决03版本和07版本Excel的访问驱动不兼容得问题
/// </summary>
/// <param name="excelPath">Excel文件全路径</param>
/// <param name="strConn">连接字符串</param>
/// <returns></returns>
public static OleDbConnection OpenExcel(string excelPath, out string strConn)
{
OleDbConnection conn = null;
//先用03版Excel连接方式
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelPath + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn))
{
//在尝试用07的连接方式
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 12.0;HDR=No;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn)) return null;
}
return conn;
}
/// <summary>
/// 打开Excel文件
/// </summary>
/// <param name="connectString">连接字符串</param>
/// <param name="conn">连接信息</param>
/// <returns></returns>
private static bool OpenExcelConnection(string connectString, out OleDbConnection conn)
{
conn = new OleDbConnection(connectString);
try
{
conn.Open();
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 获取Excel的内容
/// 备注:把Excel读取到DataTable之后
/// 的列标题
/// </summary>
/// <param name="excelPath"></param>
/// <param name="HasColumn"></param>
/// <returns></returns>
public static System.Data.DataTable GetExcelTable(string excelPath, bool HasColumn)
{
try
{
//打开Excel连接
string connString = "";
OleDbConnection conn = null;
if (HasColumn == true)
{
conn = OpenExcelEx(excelPath, out connString); //连接
}
else
{
conn = OpenExcel(excelPath, out connString); //连接
}
//读取Excel
List<string> lstName = GetFirstSheetNames(connString);
System.Data.DataTable dtTable = null;
foreach (string strSheetName in lstName)
{
string strSql = "select * from [" + strSheetName + "]";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(strSql, conn); //查询
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
System.Data.DataTable table = dtSet.Tables[0];
//table.Columns[0].ColumnName = table.Rows[0][table.Columns[0]].ToString();
//table.Rows.RemoveAt(0);
dataAdapter.Dispose();
if (table.Columns.Count > 1)
{
dtTable = table;
break;
}
}
conn.Close(); //cql 进程就不会被占用
return dtTable;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 获取Excel的内容
/// 备注:把Excel读取到DataTable之后,默认把Excel的第一行作为Datatable
/// 的列标题
/// </summary>
/// <param name="excelPath"></param>
/// <param name="HasColumn">是否把一行做表头</param>
/// <returns></returns>
public static System.Data.DataTable GetExcelTableEX(string excelPath, bool HasColumn)
{
try
{
//打开Excel连接
string connString = "";
OleDbConnection conn = null;
if (HasColumn == true)
{
conn = OpenExcelEx(excelPath, out connString); //连接
}
else
{
conn = OpenExcel(excelPath, out connString); //连接
}
//读取Excel
List<string> lstName = GetFirstSheetNames(connString);
System.Data.DataTable dtTable = null;
foreach (string strSheetName in lstName)
{
string strSql = "select * from [" + strSheetName + "]";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(strSql, conn); //查询
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
System.Data.DataTable table = dtSet.Tables[0];
foreach (DataColumn col in table.Columns)
{
col.ColumnName = table.Rows[0][col].ToString();
}
table.Rows.RemoveAt(0);
dataAdapter.Dispose();
if (table.Columns.Count > 1)
{
dtTable = table;
break;
}
}
conn.Close(); //cql 进程就不会被占用
return dtTable;
}
catch (Exception ex)
{
return null;
}
}
private static List<string> GetFirstSheetNames(string connectionString)
{
List<string> lstName = new List<string>();
using (OleDbConnection connection = new
OleDbConnection(connectionString))
{
connection.Open();
System.Data.DataTable schemaTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
foreach (DataRow row in schemaTable.Rows)
{
string tableName = row[2].ToString().Trim();
lstName.Add(tableName);
}
connection.Close();
}
return lstName;
}
#region 打开Excel连接 ADO.Net
/// <summary>
/// 打开Excel文件,把一行做表头
/// 解决03版本和07版本Excel的访问驱动不兼容得问题
/// </summary>
/// <param name="excelPath">Excel文件全路径</param>
/// <param name="strConn">连接字符串</param>
/// <returns></returns>
public static OleDbConnection OpenExcelEx(string excelPath, out string strConn)
{
OleDbConnection conn = null;
//先用03版Excel连接方式
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn))
{
//在尝试用07的连接方式
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn)) return null;
}
return conn;
}
/// <summary>
/// 打开Excel文件
/// 解决03版本和07版本Excel的访问驱动不兼容得问题
/// </summary>
/// <param name="excelPath">Excel文件全路径</param>
/// <param name="strConn">连接字符串</param>
/// <returns></returns>
public static OleDbConnection OpenExcel(string excelPath, out string strConn)
{
OleDbConnection conn = null;
//先用03版Excel连接方式
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelPath + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn))
{
//在尝试用07的连接方式
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 12.0;HDR=No;IMEX=1\"";
if (!OpenExcelConnection(strConn, out conn)) return null;
}
return conn;
}
/// <summary>
/// 打开Excel文件
/// </summary>
/// <param name="connectString">连接字符串</param>
/// <param name="conn">连接信息</param>
/// <returns></returns>
private static bool OpenExcelConnection(string connectString, out OleDbConnection conn)
{
conn = new OleDbConnection(connectString);
try
{
conn.Open();
return true;
}
catch (Exception ex)
{
return false;
}
}
相关文章推荐
- 强大的vim配置文件,让编程更随意
- Tutorial 01: Making Screencaps
- Unity 特殊文件夹
- 谈谈Memcached与Redis
- Enumeration遍历
- [置顶] 自定义view之圆形进度条
- 服务器硬件/系统信息查询
- 【后缀数组之应用】【待续】
- 解决firefox弱临时 Diffie-Hellman 密钥的错误
- HDU 3743 Frosh Week(逆序对-BIT)
- hdoj 4322 Candy 【最大费用最大流】【经典题目】【最大流时 维护费用的最大效益】
- liunx-fastboot命令行的使用方法
- Hadoop常见错误及解决办法汇总
- 构造url测试action与dao实例
- 【笔试】37、顺时针打印矩阵
- 数据库常用函数大全(数学函数、字符串函数、其他函数)
- 二叉搜索树的后序遍历序列
- Linux:chmod -R 777 * 是什么意思?
- SQL ---指令实例语句
- 初到Hp实训基地感受