536 lines
18 KiB
C#
536 lines
18 KiB
C#
|
|
// ================================================================================
|
|||
|
|
// File: ExcelFile.cs
|
|||
|
|
// Desc: Excel<65><6C><EFBFBD><EFBFBD><EFBFBD>ࡣ
|
|||
|
|
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Excel<65><6C><EFBFBD>ݵĵ<DDB5><C4B5>뵼<EFBFBD><EBB5BC><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Called by:
|
|||
|
|
//
|
|||
|
|
// Auth: <20><><EFBFBD><EFBFBD>
|
|||
|
|
// Date: 2010<31><30>8<EFBFBD><38>20<32><30>
|
|||
|
|
// ================================================================================
|
|||
|
|
// Change History
|
|||
|
|
// ================================================================================
|
|||
|
|
// Date: Author: Description:
|
|||
|
|
// -------- -------- -------------------
|
|||
|
|
//
|
|||
|
|
// ================================================================================
|
|||
|
|
// Copyright (C) 2010-2012
|
|||
|
|
// ================================================================================
|
|||
|
|
using System;
|
|||
|
|
using System.Data;
|
|||
|
|
using System.Data.OleDb;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Collections.Specialized;
|
|||
|
|
using System.Text;
|
|||
|
|
|
|||
|
|
namespace xiaoy.Excel
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// Excel<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ࡣ
|
|||
|
|
/// </summary>
|
|||
|
|
public class ExcelFile
|
|||
|
|
{
|
|||
|
|
#region ˽<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//excel<65>汾<EFBFBD><E6B1BE>Ĭ<EFBFBD><C4AC>Ϊ98-2003<30><33>Excel<65><6C>
|
|||
|
|
string m_version=string.Empty;
|
|||
|
|
//<2F><><EFBFBD>Ӵ<EFBFBD><D3B4>е<EFBFBD>HDR<44><52><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>ڱ<EFBFBD>ʶ<EFBFBD><CAB6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD>ǡ<EFBFBD>
|
|||
|
|
string m_hdr = string.Empty;
|
|||
|
|
//excel<65>ļ<EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
string m_filePath = string.Empty;
|
|||
|
|
DataTable m_dataSource = null;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>澲̬<E6BEB2><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
static NameValueCollection m_excelVersion = null;
|
|||
|
|
static NameValueCollection m_excelTypeMap = null;
|
|||
|
|
|
|||
|
|
static int m_maxSheelSize = 0;
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>̬<EFBFBD><CCAC><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
/// </summary>
|
|||
|
|
static ExcelFile()
|
|||
|
|
{
|
|||
|
|
m_excelVersion = AppConfig.GetConfig(AppConfigKey.ExcelVersionKey);
|
|||
|
|
m_excelTypeMap = AppConfig.GetConfig(AppConfigKey.ExcelTypeKey);
|
|||
|
|
m_maxSheelSize = int.Parse(AppConfig.AppSettings[AppConfigKey.MaxSheelSize]);
|
|||
|
|
|
|||
|
|
////<2F><>m_excelVersionֵ<6E>е<EFBFBD>'<27>滻<EFBFBD><E6BBBB>"
|
|||
|
|
//foreach (string key in m_excelVersion.Keys)
|
|||
|
|
//{
|
|||
|
|
// m_excelVersion[key] = m_excelVersion[key].Replace("'","\"");
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>ι<DEB2><CEB9>캯<EFBFBD><ECBAAF>
|
|||
|
|
/// </summary>
|
|||
|
|
public ExcelFile():this(null)
|
|||
|
|
{ }
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="excelVersion">Excel<65>ĵ<EFBFBD><C4B5>汾<EFBFBD><E6B1BE>ʹ<EFBFBD><CAB9>ExcelVersion<6F><6E><EFBFBD>͡<EFBFBD></param>
|
|||
|
|
public ExcelFile(string excelVersion)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
|
m_version = ExcelVersion.Excel8;
|
|||
|
|
m_hdr = HDRType.Yes;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
|
if (!string.IsNullOrEmpty(excelVersion))
|
|||
|
|
{
|
|||
|
|
m_version = excelVersion;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Excel<65>ĵ<EFBFBD><C4B5>汾<EFBFBD>š<EFBFBD>
|
|||
|
|
/// ΪExcelVersion<6F><6E><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
/// </summary>
|
|||
|
|
public string Version
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_version;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
m_version = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HDR<44><52><EFBFBD>͡<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public string HDR
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return HDR;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
HDR = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Excel<65>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public string FilePath
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_filePath;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
m_filePath = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
|||
|
|
/// </summary>
|
|||
|
|
public DataTable DataSource
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_dataSource;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
m_dataSource = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>DataSource<63><65>Excel<65><6C>
|
|||
|
|
/// </summary>
|
|||
|
|
public void Import()
|
|||
|
|
{
|
|||
|
|
SetData(DataSource, FilePath, Version, HDR);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡExcel<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="bMerge"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ϲ<EFBFBD></param>
|
|||
|
|
/// <returns>DataTable<6C><65><EFBFBD><EFBFBD></returns>
|
|||
|
|
public DataTable[] GetData(bool bMerge)
|
|||
|
|
{
|
|||
|
|
return GetData(FilePath, Version, HDR, bMerge);
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// <summary>
|
|||
|
|
/// д<><D0B4><EFBFBD>ݵ<EFBFBD>Excel<65><6C>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="dtSource"><3E><><EFBFBD><EFBFBD>Դ</param>
|
|||
|
|
/// <param name="filePath">Excel<65><6C><EFBFBD><EFBFBD>·<EFBFBD><C2B7></param>
|
|||
|
|
/// <param name="excelVersion">excel<65>汾<EFBFBD><E6B1BE>ΪExcelVersion<6F><6E><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="pHDR"><3E><>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>⣬ΪHDRType<70><65><EFBFBD><EFBFBD></param>
|
|||
|
|
public static void SetData(DataTable dtSource, string filePath, string excelVersion, string pHDR)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ԴΪ<D4B4><CEAA>
|
|||
|
|
if (dtSource == null)
|
|||
|
|
{
|
|||
|
|
throw new Exception("<22><><EFBFBD><EFBFBD><EFBFBD>ݿɵ<DDBF>");
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Ϊ<EFBFBD><CEAA>
|
|||
|
|
if(string.IsNullOrEmpty(filePath))
|
|||
|
|
{
|
|||
|
|
throw new Exception("δ<><CEB4><EFBFBD><EFBFBD>Excel<65><6C><EFBFBD><EFBFBD>·<EFBFBD><C2B7>");
|
|||
|
|
}
|
|||
|
|
//ɾ<><C9BE><EFBFBD>ļ<EFBFBD>
|
|||
|
|
if (File.Exists(filePath))
|
|||
|
|
{
|
|||
|
|
File.Delete(filePath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string connectionString = string.Format(m_excelVersion[excelVersion],
|
|||
|
|
filePath,pHDR);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Excel
|
|||
|
|
using(OleDbConnection Connection = new OleDbConnection(connectionString))
|
|||
|
|
{
|
|||
|
|
Connection.Open();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
using(OleDbCommand command = new OleDbCommand())
|
|||
|
|
{
|
|||
|
|
command.Connection = Connection;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʽ<EFBFBD>磺Name VarChar<61><72>CreateDate Date
|
|||
|
|
string colList = CreateExcelColums(dtSource);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SQL<51><4C><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><>ʽ<EFBFBD><CABD> "INSERT INTO TABLE [tablename](col1,col2,col3) VALUES(@col1,@col2,@col3)";
|
|||
|
|
StringBuilder sbColumNames = new StringBuilder();
|
|||
|
|
StringBuilder sbColumValues = new StringBuilder();
|
|||
|
|
int c = 0;
|
|||
|
|
foreach (DataColumn dc in dtSource.Columns)
|
|||
|
|
{
|
|||
|
|
sbColumNames.AppendFormat(",[{0}]", dc.ColumnName);
|
|||
|
|
sbColumValues.AppendFormat(",@{0}", "c_"+c.ToString());
|
|||
|
|
c++;
|
|||
|
|
}
|
|||
|
|
//ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
|||
|
|
sbColumNames.Remove(0, 1);
|
|||
|
|
sbColumValues.Remove(0, 1);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿҳ<C3BF><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ҳ
|
|||
|
|
int totalRows = dtSource.Rows.Count;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int pageIndex = 0;
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> do...whileѭ<65><D1AD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int insertRows = m_maxSheelSize - 1;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>дﵽ<D0B4><EFB5BD><EFBFBD><EFBFBD>
|
|||
|
|
if (totalRows < insertRows)
|
|||
|
|
{
|
|||
|
|
insertRows = totalRows;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string tableName = dtSource.TableName + pageIndex;
|
|||
|
|
if (pageIndex == 0)
|
|||
|
|
{
|
|||
|
|
tableName = "Sheet1";
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
StringBuilder sbCom = new StringBuilder();
|
|||
|
|
sbCom.Append("CREATE TABLE [");
|
|||
|
|
sbCom.Append(tableName);
|
|||
|
|
sbCom.Append("](");
|
|||
|
|
sbCom.Append(colList);
|
|||
|
|
sbCom.Append(")");
|
|||
|
|
command.CommandText = sbCom.ToString();
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
command.ExecuteNonQuery();
|
|||
|
|
}
|
|||
|
|
catch(Exception ex)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Create<74><65><EFBFBD>䴴<EFBFBD><E4B4B4>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>Excel<65>ļ<EFBFBD>
|
|||
|
|
CreateExcelFile(filePath, excelVersion, command.CommandText);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sbCom = new StringBuilder();
|
|||
|
|
sbCom.AppendFormat("INSERT INTO [{0}]({1}) VALUES({2})",
|
|||
|
|
tableName, sbColumNames.ToString(), sbColumValues.ToString());
|
|||
|
|
int startIndex = pageIndex * (m_maxSheelSize-1);
|
|||
|
|
int endIndex = pageIndex * (m_maxSheelSize-1) + insertRows;
|
|||
|
|
for (int i = startIndex; i < endIndex; i++)
|
|||
|
|
{
|
|||
|
|
DataRow drData = dtSource.Rows[i];
|
|||
|
|
OleDbParameterCollection dbParam = command.Parameters;
|
|||
|
|
dbParam.Clear();
|
|||
|
|
c = 0;
|
|||
|
|
foreach (DataColumn dc in dtSource.Columns)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
dbParam.Add(new OleDbParameter("@" + "c_"+c.ToString(), GetOleDbTypeByDataColumn(dc)));
|
|||
|
|
dbParam["@" + "c_" + c.ToString()].Value = drData[dc.ColumnName];
|
|||
|
|
c++;
|
|||
|
|
}
|
|||
|
|
command.CommandText = sbCom.ToString();
|
|||
|
|
command.ExecuteNonQuery();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
totalRows = totalRows - insertRows;
|
|||
|
|
pageIndex++;
|
|||
|
|
|
|||
|
|
}while(totalRows > 0);
|
|||
|
|
}//end of using OleDbCommand
|
|||
|
|
}// end of using OleDbConnection
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Excel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="filePath">excel<65>ĵ<EFBFBD>·<EFBFBD><C2B7></param>
|
|||
|
|
/// <param name="excelVersion"><3E>ĵ<EFBFBD><C4B5>汾</param>
|
|||
|
|
/// <param name="pHDR"><3E><>һ<EFBFBD><D2BB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="bMerge">
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>Ƿ<EFBFBD><C7B7>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ϲ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣֤<EBB1A3><D6A4>ҳ<EFBFBD>ı<EFBFBD><C4B1>ṹһ<E1B9B9><D2BB>
|
|||
|
|
/// </param>
|
|||
|
|
/// <returns>DataTable<6C><65></returns>
|
|||
|
|
public static DataTable[] GetData(string filePath, string excelVersion, string pHDR,bool bMerge)
|
|||
|
|
{
|
|||
|
|
List<DataTable> dtResult = new List<DataTable>();
|
|||
|
|
string connectionString = string.Format(m_excelVersion[excelVersion],
|
|||
|
|
filePath,pHDR);
|
|||
|
|
using (OleDbConnection con = new OleDbConnection(connectionString))
|
|||
|
|
{
|
|||
|
|
con.Open();
|
|||
|
|
string[] sheels = GetExcelWorkSheets(filePath, excelVersion);
|
|||
|
|
foreach (string sheelName in sheels)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
DataTable dtExcel = new DataTable();
|
|||
|
|
OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from [" + sheelName + "$]", con);
|
|||
|
|
|
|||
|
|
adapter.FillSchema(dtExcel, SchemaType.Mapped);
|
|||
|
|
adapter.Fill(dtExcel);
|
|||
|
|
|
|||
|
|
dtExcel.TableName = sheelName;
|
|||
|
|
dtResult.Add(dtExcel);
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{
|
|||
|
|
//<2F>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ռ<EFBFBD><D5BC>ɡ<EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ű<EFBFBD>
|
|||
|
|
if (bMerge)
|
|||
|
|
{
|
|||
|
|
for (int i = 1; i < dtResult.Count; i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ղźϲ<C5BA>
|
|||
|
|
if (dtResult[0].Columns.Count==dtResult[i].Columns.Count &&
|
|||
|
|
dtResult[i].Rows.Count > 0)
|
|||
|
|
{
|
|||
|
|
dtResult[0].Load(dtResult[i].CreateDataReader());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return dtResult.ToArray();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region ˽<EFBFBD>о<EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WorkSheet<65><74><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ArrayList<73><74><EFBFBD><EFBFBD><EFBFBD>ؿ<F2B7B5BB>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="filePath">Ҫ<><D2AA>ȡ<EFBFBD><C8A1>Excel</param>
|
|||
|
|
/// <param name="excelVersion"><3E>ĵ<EFBFBD><C4B5>汾</param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WorkSheet<65><74><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>string[]<5D><><EFBFBD><EFBFBD><EFBFBD>ؿ<F2B7B5BB></returns>
|
|||
|
|
private static string[] GetExcelWorkSheets(string filePath, string excelVersion)
|
|||
|
|
{
|
|||
|
|
List<string> alTables = new List<string>();
|
|||
|
|
string connectionString = string.Format(m_excelVersion[excelVersion],
|
|||
|
|
filePath, "Yes");
|
|||
|
|
using (OleDbConnection connection = new OleDbConnection(connectionString))
|
|||
|
|
{
|
|||
|
|
connection.Open();
|
|||
|
|
|
|||
|
|
DataTable dt = new DataTable();
|
|||
|
|
|
|||
|
|
dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
|
|||
|
|
|
|||
|
|
if (dt == null)
|
|||
|
|
{
|
|||
|
|
throw new Exception("<22><EFBFBD><DEB7><EFBFBD>ȡָ<C8A1><D6B8>Excel<65>ļܹ<C4BC><DCB9><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach (DataRow dr in dt.Rows)
|
|||
|
|
{
|
|||
|
|
string tempName = dr["Table_Name"].ToString();
|
|||
|
|
|
|||
|
|
int iDolarIndex = tempName.IndexOf('$');
|
|||
|
|
|
|||
|
|
if (iDolarIndex > 0)
|
|||
|
|
{
|
|||
|
|
tempName = tempName.Substring(0, iDolarIndex);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Excel2003<30><33>ijЩ<C4B3><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ֵı<D6B5><C4B1><EFBFBD><DEB7><EFBFBD>ȷʶ<C8B7><CAB6><EFBFBD><EFBFBD>BUG<55><47>
|
|||
|
|
if (tempName[0] == '\'')
|
|||
|
|
{
|
|||
|
|
if (tempName[tempName.Length - 1] == '\'')
|
|||
|
|
{
|
|||
|
|
tempName = tempName.Substring(1, tempName.Length - 2);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
tempName = tempName.Substring(1, tempName.Length - 1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
if (!alTables.Contains(tempName))
|
|||
|
|
{
|
|||
|
|
alTables.Add(tempName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (alTables.Count == 0)
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
return alTables.ToArray();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>Excel<65>ļ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="filePath"><3E>ļ<EFBFBD>·<EFBFBD><C2B7></param>
|
|||
|
|
/// <param name="excelVersion">excel<65>汾</param>
|
|||
|
|
/// <param name="excelVersion"><3E><><EFBFBD><EFBFBD>sheet<65>Ľű<C4BD></param>
|
|||
|
|
private static void CreateExcelFile(string filePath, string excelVersion,string createSql)
|
|||
|
|
{
|
|||
|
|
string outputDir = Path.GetDirectoryName(filePath);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (!Directory.Exists(outputDir))
|
|||
|
|
{
|
|||
|
|
Directory.CreateDirectory(outputDir);
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B4B4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
|
|||
|
|
|
|||
|
|
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
|
|||
|
|
{
|
|||
|
|
if (excelVersion == ExcelVersion.Excel12)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>2007Excel
|
|||
|
|
fs.Write(Properties.Resources._2007, 0, Properties.Resources._2007.Length);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>2003Excel
|
|||
|
|
fs.Write(Properties.Resources._2003, 0, Properties.Resources._2003.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Sheet<65><74><EFBFBD><EFBFBD>
|
|||
|
|
string connectionString = string.Format(m_excelVersion[excelVersion],
|
|||
|
|
filePath, "Yes");
|
|||
|
|
using (OleDbConnection connection = new OleDbConnection(connectionString))
|
|||
|
|
{
|
|||
|
|
connection.Open();
|
|||
|
|
using (OleDbCommand command = new OleDbCommand())
|
|||
|
|
{
|
|||
|
|
command.CommandText = createSql;
|
|||
|
|
command.ExecuteNonQuery();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>Excel<65>нű<D0BD><C5B1><EFBFBD>
|
|||
|
|
/// <20><>ʽ<EFBFBD>磺Name VarChar<61><72>CreateDate Date
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="dtSource"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
private static string CreateExcelColums(DataTable dtSource)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (dtSource.Columns.Count == 0)
|
|||
|
|
{
|
|||
|
|
throw new Exception("<22><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>Ϊ0");
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
StringBuilder sbColums = new StringBuilder();
|
|||
|
|
foreach (DataColumn dc in dtSource.Columns)
|
|||
|
|
{
|
|||
|
|
sbColums.AppendFormat(",[{0}] {1}", dc.ColumnName, GetExcelTypeByDataColumn(dc));
|
|||
|
|
}
|
|||
|
|
//ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
|||
|
|
sbColums.Remove(0, 1);
|
|||
|
|
return sbColums.ToString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡDataColumn<6D><6E>Ӧ<EFBFBD><D3A6>Excel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="dc">Դ<><D4B4><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD></param>
|
|||
|
|
/// <returns>Excel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
private static string GetExcelTypeByDataColumn(DataColumn dc)
|
|||
|
|
{
|
|||
|
|
foreach (string key in m_excelTypeMap.Keys)
|
|||
|
|
{
|
|||
|
|
if (key == dc.DataType.Name)
|
|||
|
|
{
|
|||
|
|
return m_excelTypeMap[dc.DataType.Name];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return m_excelTypeMap[AppConfigKey.DefaultTypeKey];
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡDataColumn<6D><6E>Ӧ<EFBFBD><D3A6>Excel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="dc">Դ<><D4B4><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD></param>
|
|||
|
|
/// <returns>Excel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
private static OleDbType GetOleDbTypeByDataColumn(DataColumn dc)
|
|||
|
|
{
|
|||
|
|
switch (dc.DataType.Name)
|
|||
|
|
{
|
|||
|
|
case "String"://<2F>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
return OleDbType.VarChar;
|
|||
|
|
case "Double"://<2F><><EFBFBD><EFBFBD>
|
|||
|
|
return OleDbType.Double;
|
|||
|
|
case "Decimal"://<2F><><EFBFBD><EFBFBD>
|
|||
|
|
return OleDbType.Decimal;
|
|||
|
|
case "DateTime"://ʱ<><CAB1>
|
|||
|
|
return OleDbType.Date;
|
|||
|
|
default:
|
|||
|
|
return OleDbType.VarChar;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
}
|
|||
|
|
}
|