using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using CnasSynchronousCommon;
namespace CnasSynchronusDAL
{
public static class ExcelDAL
{
///
/// 读取Excel第一个工作表的内容
///
///
///
public static DataTable ReadExcelFirstSheetToTable(string strPath, string strExcelFileVersion)
{
DataTable dt = new DataTable();
try
{
//连接字符串
//string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
string connstring = "Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + strPath + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; "; //Office 07以下版本
if (!string.IsNullOrWhiteSpace(strExcelFileVersion) && strExcelFileVersion != "0")
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串
//string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串
OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
return set.Tables[0];
}
}
catch(Exception ex)
{
//发生异常,写入日志
AppLog.Error(ex.Message);
}
return dt;
}
internal static DataTable ReadExcelTableStruct(string strPath, string strExcelFileVersion,string strViewName,string strViewSQL, string strTableName)
{
DataTable dtNormal = new DataTable();
try
{
//连接字符串
string connstring = "Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + strPath + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; "; //Office 07以下版本
if (!string.IsNullOrWhiteSpace(strExcelFileVersion) && strExcelFileVersion != "0")
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string sql = "";
OleDbDataAdapter ada = null;
if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
sql = strViewSQL + " where 1=0";
else
sql = string.Format("SELECT * FROM [{0}$] where 1=0", strTableName); //查询字符串
ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
dtNormal = set.Tables[0];
}
}
catch (Exception ex)
{
//发生异常,写入日志
AppLog.Error(ex.Message);
}
return dtNormal;
}
///
/// 通过表名读取Excel中数据
///
///
///
///
public static DataTable ReadExcelByNameToTable(string strPath, string strExcelFileVersion, string strViewName,string strViewSQL,string strTableName)
{
DataTable dtNormal = new DataTable();
try
{
//连接字符串
string connstring = "Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + strPath + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; "; //Office 07以下版本
if (!string.IsNullOrWhiteSpace(strExcelFileVersion) && strExcelFileVersion != "0")
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string sql = "";
OleDbDataAdapter ada = null;
if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
sql = strViewSQL;
else
sql = string.Format("SELECT * FROM [{0}$]", strTableName); //查询字符串
ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
DataTable dtSheetData = set.Tables[0];
DataRow drCurrent = dtSheetData.Rows[0];
//创建标准表结构
foreach (DataColumn dc in dtSheetData.Columns)
{
DataColumn dcReady = new DataColumn
{
DataType = dc.DataType,
ColumnName = drCurrent[dc.ColumnName].ToString()
};
dtNormal.Columns.Add(dcReady);
}
//向列表中添加数据
for (int i = 1; i < dtSheetData.Rows.Count; i++)
{
DataRow drNew = dtNormal.NewRow();
for (int j = 0; j < dtSheetData.Columns.Count; j++)
{
drNew[j] = dtSheetData.Rows[i][j];
}
dtNormal.Rows.Add(drNew);
}
}
}
catch (Exception ex)
{
//发生异常,写入日志
AppLog.Error(ex.Message);
}
return dtNormal;
}
///
/// 读取Excel中所有表的表名
///
///
///
public static Dictionary ReadExcelTableNameToTable(string strPath,string strExcelFileVersion)
{
Dictionary dictTables = new Dictionary();
try
{
//连接字符串
string connstring = "Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + strPath + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; "; //Office 07以下版本
if (!string.IsNullOrWhiteSpace(strExcelFileVersion) && strExcelFileVersion != "0")
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string sql = "";
OleDbDataAdapter ada = null;
foreach (DataRow dr in sheetsName.Rows)
{
string strTableName = dr[2].ToString();
sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串
ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
//DataTable dtSheetData = set.Tables[0];
//DataTable dtNormal = new DataTable();
//DataRow drCurrent = dtSheetData.Rows[0];
////创建标准表结构
//foreach (DataColumn dc in dtSheetData.Columns)
//{
// DataColumn dcReady = new DataColumn
// {
// DataType = dc.DataType,
// ColumnName = drCurrent[dc.ColumnName].ToString()
// };
// dtNormal.Columns.Add(dcReady);
//}
//dictTables.Add(strTableName.ToUpper(), set.Tables[0]);
dictTables.Add(strTableName.ToUpper(), set.Tables[0]);
}
}
}
catch(Exception ex)
{
//发生异常,写入日志
AppLog.Error(ex.Message);
}
return dictTables;
}
public static DataTable ReadExcelTableNameToTableByDate(string strPath,string strExcelFileVersion,string strViewName,string strViewSQL,string strTableName,string strDateColumn,string strDate)
{
DataTable dtNormal = new DataTable();
try
{
//连接字符串
//string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
string connstring = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本
if (!string.IsNullOrWhiteSpace(strExcelFileVersion) && strExcelFileVersion != "0")
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string sql = "";
OleDbDataAdapter ada = null;
if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
sql = strViewSQL;
else
sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串
ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
dtNormal = set.Tables[0].Clone();
if (set.Tables[0].Rows.Count > 0)
{
DataRow[] rows = set.Tables[0].Select(string.Format("{0}>'{1}'", strDateColumn, strDate));
foreach (DataRow dr in rows)
{
DataRow drNew = dtNormal.NewRow();
drNew.ItemArray = dr.ItemArray;
dtNormal.Rows.Add(drNew);
}
}
}
}
catch (Exception ex)
{
//发生异常,写入日志
AppLog.Error(ex.Message);
}
return dtNormal;
}
}
}