不用Excel DataTable导出Excel

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

using System.Data;

using System.Data.OleDb;

 

namespace BaoZhang

{

    class Excel

    {

        public void SaveExcel(DataTable dt, string Filter, string FileName, string SheetName)

        {

            if (FileName == "")

            {

                SaveFileDialog a = new SaveFileDialog();

                a.Filter = "Excel 工作簿 (*.xls)|*.xls";

                if (a.ShowDialog() == DialogResult.OK)

                {

                    FileName = a.FileName;

                }

                else

                {

                    return;

                }

            }

 

            try

            {

                System.IO.File.Delete(FileName);

            }

            catch (Exception)

            {

                MessageBox.Show("该文件已经存在,删除文件时出错!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

                return;

            }

 

            string ConnStr;

            ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + FileName + "\";Extended Properties=\"Excel 8.0;HDR=YES\"";

 

            OleDbConnection conn_excel = new OleDbConnection();

            conn_excel.ConnectionString = ConnStr;

 

            OleDbCommand cmd_excel = new OleDbCommand();

 

            string sql;

            sql = SqlCreate(dt, SheetName);

 

            conn_excel.Open();

            cmd_excel.Connection = conn_excel;

            cmd_excel.CommandText = sql;

            cmd_excel.ExecuteNonQuery();

 

            conn_excel.Close();

 

            OleDbDataAdapter da_excel = new OleDbDataAdapter("Select * From [" + SheetName + "$]", conn_excel);

            DataTable dt_excel = new DataTable();

            da_excel.Fill(dt_excel);

 

            da_excel.InsertCommand = SqlInsert(SheetName, dt, conn_excel);

 

            DataRow dr_excel;

            string ColumnName;

 

            foreach (DataRow dr in dt.Select(Filter))

            {

                dr_excel = dt_excel.NewRow();

 

                foreach (DataColumn dc in dt.Columns)

                {

                    ColumnName = dc.ColumnName;

                    dr_excel[ColumnName] = dr[ColumnName];

                }

                dt_excel.Rows.Add(dr_excel);

            }

 

            da_excel.Update(dt_excel);

            conn_excel.Close();

 

            if (MessageBox.Show("数据成功导出到『" + FileName + "』,是否现在打开?", "导出", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

            {

                System.Diagnostics.Process.Start(FileName);

            }

        }

 

        private void CheckColumn(DataTable dt, DataTable dt_v)

        {

            foreach (DataRow dr in dt_v.Select())

            {

                if (!dt.Columns.Contains(dr["列名"].ToString()))

                {

                    dr.Delete();

                }

            }

            dt_v.AcceptChanges();

        }

 

        private string GetDataType(Type i)

        {

            string s;

 

            switch (i.Name)

            {

                case "String":

                    s = "Char";

                    break;

                case "Int32":

                    s = "Int";

                    break;

                case "Int64":

                    s = "Int";

                    break;

                case "Int16":

                    s = "Int";

                    break;

                case "Double":

                    s = "Double";

                    break;

                case "Decimal":

                    s = "Double";

                    break;

                default:

                    s = "Char";

                    break;

            }

            return s;

        }

 

        private OleDbType StringToOleDbType(Type i)

        {

            OleDbType s;

 

            switch (i.Name)

            {

                case "String":

                    s = OleDbType.Char;

                    break;

                case "Int32":

                    s = OleDbType.Integer;

                    break;

                case "Int64":

                    s = OleDbType.Integer;

                    break;

                case "Int16":

                    s = OleDbType.Integer;

                    break;

                case "Double":

                    s = OleDbType.Double;

                    break;

                case "Decimal":

                    s = OleDbType.Decimal;

                    break;

                default:

                    s = OleDbType.Char;

                    break;

 

            }

            return s;

 

        }

 

        private string SqlCreate(DataTable dt, string SheetName)

        {

            string sql;

 

            sql = "CREATE TABLE " + SheetName + " (";

 

            foreach (DataColumn dc in dt.Columns)

            {

                sql += "[" + dc.ColumnName + "] " + GetDataType(dc.DataType) + " ,";

            }

 

            //sql = "CREATE TABLE [" + SheetName + "] (";

 

            //foreach (C1.Win.C1TrueDBGrid.C1DataColumn dc in grid.Columns)

            //{

            //    sql += "[" + dc.Caption + "] " + GetDataType(dc.DataType) + ",";

            //}

            //sql = sql.Substring(0, sql.Length - 1);

            //sql += ")";

 

            sql = sql.Substring(0, sql.Length - 1);

            sql += ")";

 

            return sql;

        }

 

        // 生成 InsertCommand 并设置参数

        private OleDbCommand SqlInsert(string SheetName, DataTable dt, OleDbConnection conn_excel)

        {

            OleDbCommand i;

            string sql;

 

            sql = "INSERT INTO [" + SheetName + "$] (";

            foreach (DataColumn dc in dt.Columns)

            {

                sql += "[" + dc.ColumnName + "] ";

                sql += ",";

            }

            sql = sql.Substring(0, sql.Length - 1);

            sql += ") VALUES (";

            foreach (DataColumn dc in dt.Columns)

            {

                sql += "?,";

            }

            sql = sql.Substring(0, sql.Length - 1);

            sql += ")";

 

            i = new OleDbCommand(sql, conn_excel);

 

            foreach (DataColumn dc in dt.Columns)

            {

                i.Parameters.Add("@" + dc.Caption, StringToOleDbType(dc.DataType), 0, dc.Caption);

            }

 

            return i;

        }

 

    }

}

 转自:http://www.cnblogs.com/pam/archive/2008/09/09/1287636.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值