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

在.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;
posted @ 2006-05-25 10:38  陕北蜂农  阅读(227)  评论(0编辑  收藏  举报