/// <summary>
/// DataTable中的数据导入到Excel,使用OLEDB,
/// </summary>
/// <param name="dt">数据源Table</param>
/// <param name="excelPath">Excel文件的完整路径</param>
/// <param name="sheetName">Excel Sheet的名称</param>
/// <param name="result">导入执行的结果</param>
/// <returns></returns>
public bool DataTableToExcel(DataTable dt,string excelPath,string sheetName,out string result)
{
string ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source={0};Extended ProPerties=Excel 8.0";
if(dt == null)
{
result = "DataTable不能为空";
return false;
}
int rows = dt.Rows.Count; //行的数量
int cols = dt.Columns.Count; //列的数量
if(rows == 0)
{
result = "没有数据";
return false;
}
StringBuilder sb = new StringBuilder();
string connString = string.Format(ConnectionString,excelPath);
//生成创建表的脚本
sb.Append("CREATE TABLE " + sheetName + " ( ");
for(int i=0;i<cols;i++)
sb.Append(string.Format("[{0}] varchar,",dt.Columns[i].ColumnName));
sb.Remove(sb.Length -1,1); //移除最后一个“,”
sb.Append(")"); //最后添加一个“)”
using(OleDbConnection objConn = new OleDbConnection(connString))
{
OleDbCommand objCmd = new OleDbCommand(sb.ToString(),objConn);
try
{
objConn.Open();
objCmd.ExecuteNonQuery();
}
catch(Exception e)
{
result = "在Excel中创建表失败,错误信息:" + e.Message;
return false;
}
//生成插入数据脚本
#region 生成插入数据脚本
sb.Remove(0,sb.Length);
sb.Append("INSERT INTO " + sheetName + " ( ");
for(int i=0;i<cols;i++)
sb.Append("[" + dt.Columns[i].ColumnName + "],");
sb.Remove(sb.Length -1,1); //移除最后一个“,”
sb.Append(") values (");
for(int i=0;i<cols;i++)
sb.Append("@" + dt.Columns[i].ColumnName + ",");
sb.Remove(sb.Length -1,1); //移除最后一个
sb.Append(")");
#endregion
//建立插入动作的Command
objCmd.CommandText = sb.ToString();
OleDbParameterCollection param = objCmd.Parameters;
for(int i=0;i<cols;i++)
{
param.Add(new OleDbParameter("@" + dt.Columns[i].ColumnName, OleDbType.VarChar));
}
//遍历DataTable将数据插入新建的Excel文件中
foreach (DataRow row in dt.Rows)
{
for (int i=0; i<param.Count; i++)
{
param[i].Value = row[i];
}
objCmd.ExecuteNonQuery();
}
result = "数据已成功导入Excel";
return true;
}//end using
}
/// DataTable中的数据导入到Excel,使用OLEDB,
/// </summary>
/// <param name="dt">数据源Table</param>
/// <param name="excelPath">Excel文件的完整路径</param>
/// <param name="sheetName">Excel Sheet的名称</param>
/// <param name="result">导入执行的结果</param>
/// <returns></returns>
public bool DataTableToExcel(DataTable dt,string excelPath,string sheetName,out string result)
{
string ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source={0};Extended ProPerties=Excel 8.0";
if(dt == null)
{
result = "DataTable不能为空";
return false;
}
int rows = dt.Rows.Count; //行的数量
int cols = dt.Columns.Count; //列的数量
if(rows == 0)
{
result = "没有数据";
return false;
}
StringBuilder sb = new StringBuilder();
string connString = string.Format(ConnectionString,excelPath);
//生成创建表的脚本
sb.Append("CREATE TABLE " + sheetName + " ( ");
for(int i=0;i<cols;i++)
sb.Append(string.Format("[{0}] varchar,",dt.Columns[i].ColumnName));
sb.Remove(sb.Length -1,1); //移除最后一个“,”
sb.Append(")"); //最后添加一个“)”
using(OleDbConnection objConn = new OleDbConnection(connString))
{
OleDbCommand objCmd = new OleDbCommand(sb.ToString(),objConn);
try
{
objConn.Open();
objCmd.ExecuteNonQuery();
}
catch(Exception e)
{
result = "在Excel中创建表失败,错误信息:" + e.Message;
return false;
}
//生成插入数据脚本
#region 生成插入数据脚本
sb.Remove(0,sb.Length);
sb.Append("INSERT INTO " + sheetName + " ( ");
for(int i=0;i<cols;i++)
sb.Append("[" + dt.Columns[i].ColumnName + "],");
sb.Remove(sb.Length -1,1); //移除最后一个“,”
sb.Append(") values (");
for(int i=0;i<cols;i++)
sb.Append("@" + dt.Columns[i].ColumnName + ",");
sb.Remove(sb.Length -1,1); //移除最后一个
sb.Append(")");
#endregion
//建立插入动作的Command
objCmd.CommandText = sb.ToString();
OleDbParameterCollection param = objCmd.Parameters;
for(int i=0;i<cols;i++)
{
param.Add(new OleDbParameter("@" + dt.Columns[i].ColumnName, OleDbType.VarChar));
}
//遍历DataTable将数据插入新建的Excel文件中
foreach (DataRow row in dt.Rows)
{
for (int i=0; i<param.Count; i++)
{
param[i].Value = row[i];
}
objCmd.ExecuteNonQuery();
}
result = "数据已成功导入Excel";
return true;
}//end using
}