您的位置:首页 > 其它

在.NET中 用OleDB 把 DataSet 数据导出到 Excel文件里

2006-05-25 10:38 543 查看
在.NET中 用OleDB 把 DataSet 数据导出到 Excel文件里

下面对函数说明:

//dt为数据源(数据表)

//ExcelFileName 为要导出的Excle文件

//ModelFile为模板文件,该文件与数据源中的表一致。否则数据会导出失败。

//ModelFile文件里,需要有一张 与 dt.TableName 一致的表,而且字段也要一致。

//注明:如果不用ModelFile的话,可以用一个空白Excel文件,不过,要去掉下面创建表的注释,让OleDb自己创建一个空白表。

public static string TableToExcelFile(DataTable dt,string ExcelFileName,string ModelFile)

{

File.Copy(ModelFile,ExcelFileName); //复制一个空文件,提供写入数据用

if(File.Exists(ExcelFileName)==false)

{

return "0|系统创建临时文件失败,请与系统管理员联系!";

}

if(dt == null)

{

return "DataTable不能为空";

}

int rows = dt.Rows.Count;

int cols = dt.Columns.Count;

StringBuilder sb;

string connString;

if(rows == 0)

{

return "没有数据";

}

sb = new StringBuilder();

connString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ExcelFileName+";Extended Properties=Excel 8.0;";

//生成创建表的脚本

//----sb.Append("DROP TABLE "+dt.TableName);

/*

sb.Append("CREATE TABLE ");

sb.Append(dt.TableName + " ( ");

for(int i=0;i<cols;i++)

{

if(i < cols - 1)

sb.Append(string.Format("{0} varchar,",dt.Columns[i].ColumnName));

else

sb.Append(string.Format("{0} varchar)",dt.Columns[i].ColumnName));

}

*/

//return sb.ToString();

using(OleDbConnection objConn = new OleDbConnection(connString))

{

OleDbCommand objCmd = new OleDbCommand();

objCmd.Connection = objConn;

//objCmd.CommandText=sb.ToString();

try

{

objConn.Open();

//objCmd.ExecuteNonQuery();

}

catch(Exception e)

{

return "在Excel中创建表失败,错误信息:" + e.Message;

}

sb.Remove(0,sb.Length);

sb.Append("INSERT INTO ");

sb.Append(dt.TableName + " ( ");

for(int i=0;i<cols;i++)

{

if(i < cols - 1)

sb.Append(dt.Columns[i].ColumnName + ",");

else

sb.Append(dt.Columns[i].ColumnName + ") values (");

}

for(int i=0;i<cols;i++)

{

if(i < cols - 1)

sb.Append("@" + dt.Columns[i].ColumnName + ",");

else

sb.Append("@" + dt.Columns[i].ColumnName + ")");

}

//建立插入动作的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();

}

return "数据已成功导入Excel";

}

需要加入以下引用

using System;

using System.IO;

using System.Text;

using System.Data;

using System.Data.OleDb;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: