快速导入Excel

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.OleDb;

using System.Data.SqlClient;

using System.Data;

using System.Windows.Forms;

using System.Data.Odbc;



namespace QZMDB.Function

{



    /// <summary>

    /// Excel文件的读取

    /// </summary>

    public class ExcelLoadFunction

    {

        public static string ConStr = Properties.Settings.Default.QZMDBConnectionString;

        DataSet ds = new DataSet();

        /// <summary>

        /// 读取Excel

        /// </summary>

        /// <param name="fileName"></param>

        /// <returns></returns>

        public int LoadExcel(string fileName)

        {

            //  return BlacklistQuChong(fileName); ////如果需要对黑名单进行去重处理则放行此代码段.注掉"ds-return0;"之间代码段

            ds = CSV_Getds(fileName);

            if (ds.Tables[0].Rows.Count != 0)

            {



                try

                {



                    using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))

                    {

                        sbc.DestinationTableName = "tbBlackList";//对应的数据库表名

                        sbc.ColumnMappings.Clear();

                        sbc.ColumnMappings.Add("黑名单号码", "mobile");//关联ds.tables[0]中的列和数据库中的列明

                        sbc.BatchSize = 1000;  //设置每次放入条数

                        sbc.WriteToServer(ds.Tables[0]);

                    }

                    return ds.Tables[0].Rows.Count;

                }

                catch (Exception ex)

                {

                    System.Windows.Forms.MessageBox.Show(ex.Message);

                    return 0;

                }



            }

            return 0;



        }

        /// <summary>

        /// 黑名单导入(带去重处理)

        /// </summary>

        /// <param name="fileName"></param>

        /// <returns></returns>

        private int BlacklistQuChong(string fileName)

        {

            try

            {

                SqlConnection sConn = new SqlConnection(ConStr);

                string[] name = GetTablesFromOleDb(fileName);

                string a = name[0].Replace("'", "");

                string OLEDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +

                                    "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取

                                    "data source=" + fileName;

                sConn.Open();

                OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);

                DataTable sourceDataTable = new DataTable();

                oda.Fill(sourceDataTable);

                oda.Dispose();



                int result = 0;

                foreach (DataRow item in sourceDataTable.Rows)

                {

                    string ids = Convert.ToString(item["黑名单号码"]);

                    if (delete(ids))

                    {

                        string sql = "insert into tbBlackList values(@mobile)";

                        SqlParameter[] param = new SqlParameter[]

                   {

                       new SqlParameter("@mobile",ids),

                   };

                        result += SqlHelper.SqlHelper.ExecuteNonQuery(sConn, System.Data.CommandType.Text, sql, param);

                    }

                }



                sConn.Close();

                return result;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

                throw;

            }

        }





        public static string[] GetTablesFromOleDb(string path)

        {



            string[] result = null;

            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +

                                    "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取

                                    "data source=" + path;

            OleDbConnection conn = null;

            DataTable tblSchema = null;





            // 初始化连接,并打开

            conn = new OleDbConnection(connStr);

            try

            {

                conn.Open();

                tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                result = new string[tblSchema.Rows.Count];

                for (int i = 0; i < tblSchema.Rows.Count; i++)

                {

                    result[i] = tblSchema.Rows[i][2].ToString();

                }

            }

            catch (Exception)

            {

                return null;

            }



            finally

            {

                // 关闭连接

                conn.Close();

            }

            return result;

        }

        /*

         * 此处代码段进行了修改

         * 原有:先判断是否存在数据行有删除后添加

         * 更改:如果有重复的数据行则保持不执行添加操作

         * 时间:20110711

         * 备注;详情参见注掉的代码片段

         * 修改人:Roni

         * **/

        private bool delete(string ids)

        {

            SqlConnection sConn = new SqlConnection(ConStr);



            string select = "select * from tbBlackList where mobile='" + ids + "'";



            using (SqlDataReader reader = SqlHelper.SqlHelper.ExecuteReader(ConStr, CommandType.Text, select, null))

            {



                if (reader.HasRows)

                {

                    //string s = "delete from tbBlackList where mobile='" + ids + "'";

                    //SqlHelper.SqlHelper.ExecuteNonQuery(sConn, System.Data.CommandType.Text, s, null);

                    return false;

                }



            }

            sConn.Close();

            return true;

        }



        internal static bool CreateExcelByCondition(string filePath, string ExcelName)

        {

            throw new NotImplementedException();

        }

        /// <summary>

        /// 查找手机号码是否重复

        /// </summary>

        /// <param name="ids"></param>

        /// <returns></returns>

        private bool deleteByMobile(string ids)

        {

            SqlConnection sConn = new SqlConnection(ConStr);



            string select = "select * from tbDialResultHis where mobile='" + ids + "'";



            using (SqlDataReader reader = SqlHelper.SqlHelper.ExecuteReader(ConStr, CommandType.Text, select, null))

            {



                if (reader.HasRows)

                {

                    return false;

                }



            }

            sConn.Close();

            return true;

        }







        /// <summary>

        /// Excel

        /// </summary>

        /// <param name="fileName"></param>

        /// <returns></returns>

        public int LoadExcelByFileName(string fileName, int projectId, int productID, string rev_file_name, string input_date)

        {

            ds = CSV_Getds(fileName);

    

            if (ds.Tables[0].Rows.Count != 0)

            {

                try

                {

                    if (!ds.Tables[0].Columns.Contains("项目编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建

                    }

                    if (!ds.Tables[0].Columns.Contains("产品编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));



                    }

                    if (!ds.Tables[0].Columns.Contains("导入时间"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));



                    }

                    if (!ds.Tables[0].Columns.Contains("导入文件名"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));



                    }



                    //if (!ds.Tables[0].Columns.Contains("手机1"))

                    //{

                    //    ds.Tables[0].Columns.Add(new DataColumn("手机1", typeof(string)));



                    //}

                    string errmsg = "";

                    foreach (DataRow dr in ds.Tables[0].Rows)

                    {

                         

                        dr["项目编号"] = projectId;

                        dr["产品编号"] = productID;

                        dr["导入时间"] = input_date;

                        dr["导入文件名"] = rev_file_name;

                        if (dr["手机"].ToString().Length > 11)

                        {

                            errmsg += dr["手机"].ToString()+" 手机长度超过11位\r\n";

                        }

                       

                    }



                    if(errmsg.Length!=0)

                    {

                        MessageBox.Show(errmsg);

                        return 0;

                    }

                    using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))

                    {

                        sbc.DestinationTableName = "tbDialResultHis";//对应的数据库表名

                        sbc.ColumnMappings.Clear();

                        sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明

                        sbc.ColumnMappings.Add("产品编号", "product_id");

                        sbc.ColumnMappings.Add("导入时间", "input_dt");

                        sbc.ColumnMappings.Add("导入文件名", "rev_file_name");





                        sbc.ColumnMappings.Add("手机", "mobile");

                         sbc.ColumnMappings.Add("姓名", "name");

                         sbc.ColumnMappings.Add("性别", "sex");

                            sbc.ColumnMappings.Add("年龄", "age");

                         sbc.ColumnMappings.Add("营销是否成功", "marketing_result");

                         sbc.ColumnMappings.Add("已接通结果", "dial_result");

                         sbc.ColumnMappings.Add("备注", "dial_remark");

                         sbc.ColumnMappings.Add("电话经理", "dial_user");

                        sbc.BatchSize = 1000;  //设置每次放入条数

                        sbc.WriteToServer(ds.Tables[0]);

                    }

                    return ds.Tables[0].Rows.Count;

                }

                catch (Exception ex)

                {

                    System.Windows.Forms.MessageBox.Show(ex.Message);

                    return 0;

                }



            }

            return 0;



        }

        /// <summary>

        /// 拨打清单导入

        /// </summary>

        /// <param name="fileName"></param>

        /// <param name="projectId"></param>

        /// <param name="productID"></param>

        /// <param name="rev_file_name"></param>

        /// <param name="input_date"></param>

        /// <returns></returns>

        public int LoadExcelByFileName_CallList(string fileName, int projectId, int productID, string rev_file_name, string input_date)

        {

               ds = CSV_Getds(fileName);

                if (ds.Tables[0].Rows.Count != 0)

                {

                    try

                    {

                        if (!ds.Tables[0].Columns.Contains("项目编号"))

                        {

                            ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建

                        }

                        if (!ds.Tables[0].Columns.Contains("产品编号"))

                        {

                            ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));



                        }

                        if (!ds.Tables[0].Columns.Contains("导入时间"))

                        {

                            ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));



                        }

                        if (!ds.Tables[0].Columns.Contains("导入文件名"))

                        {

                            ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));



                        }

                        foreach (DataRow dr in ds.Tables[0].Rows)

                        {

                            dr["项目编号"] = projectId;

                            dr["产品编号"] = productID;

                            dr["导入时间"] = input_date;

                            dr["导入文件名"] = rev_file_name;

                        }



                        using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))

                        {

                            sbc.DestinationTableName = "tbDialHis";//对应的数据库表名

                            sbc.ColumnMappings.Clear();

                            sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明

                            sbc.ColumnMappings.Add("产品编号", "product_id");

                            sbc.ColumnMappings.Add("导入时间", "input_dt");

                            //sbc.ColumnMappings.Add("导入文件名", "rev_file_name");





                            sbc.ColumnMappings.Add("被叫", "mobile");

                            sbc.ColumnMappings.Add("呼出时间", "dial_dt");

                            sbc.ColumnMappings.Add("通话时长(秒)", "dial_duration");

                              sbc.BatchSize = 1000;  //设置每次放入条数

                            sbc.WriteToServer(ds.Tables[0]);

                        }

                        return ds.Tables[0].Rows.Count;

                    }

                    catch (Exception ex)

                    {

                        System.Windows.Forms.MessageBox.Show(ex.Message);

                        return 0;

                    }



                }

                return 0;



            

        }



        /// <summary>

        /// QC数据导入

        /// </summary>

        /// <param name="projectID"></param>

        /// <param name="productID"></param>

        /// <param name="filename"></param>

        /// <param name="time"></param>

        /// <returns></returns>

        internal int LoadExcelByFileName_QCData(int projectID, int productID, string filename, string time)

        {    

             ds = CSV_Getds(filename);

            if (ds.Tables[0].Rows.Count != 0)

            {

                try

                {

                    if (!ds.Tables[0].Columns.Contains("项目编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建

                    }

                    if (!ds.Tables[0].Columns.Contains("产品编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));



                    }

                    if (!ds.Tables[0].Columns.Contains("导入时间"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("导入时间", typeof(DateTime)));



                    }

                    if (!ds.Tables[0].Columns.Contains("导入文件名"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("导入文件名", typeof(string)));



                    }

                    foreach (DataRow dr in ds.Tables[0].Rows)

                    {

                        dr["项目编号"] = projectID;

                        dr["产品编号"] = productID;

                        dr["导入时间"] = time;

                        dr["导入文件名"] = filename;

                    }



                    using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))

                    {

                        sbc.DestinationTableName = "tbQCHis";//对应的数据库表名

                        sbc.ColumnMappings.Clear();

                        sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明

                        sbc.ColumnMappings.Add("产品编号", "product_id");

                        sbc.ColumnMappings.Add("导入时间", "input_dt");

                        sbc.ColumnMappings.Add("导入文件名", "rev_file_name");





                        sbc.ColumnMappings.Add("用户号码", "mobile");

                        sbc.ColumnMappings.Add("开通时间", "qc_order_dt");

                        sbc.BatchSize = 1000;  //设置每次放入条数

                        sbc.WriteToServer(ds.Tables[0]);

                    }

                    return ds.Tables[0].Rows.Count;

                }

                catch (Exception ex)

                {

                    System.Windows.Forms.MessageBox.Show(ex.Message);

                    return 0;

                }



            }

            return 0;



        }



        /// <summary>

        /// 电信反馈表

        /// </summary>

        /// <param name="FilePath"></param>

        /// <param name="projectID"></param>

        /// <param name="productID"></param>

        /// <param name="input_date"></param>

        /// <returns></returns>

        public int LoadExcelByFileName_tbFeedBack(string FilePath, int projectID, int productID, string input_date)

        {

            ds = CSV_Getds(FilePath);

            if (ds.Tables[0].Rows.Count != 0)

            {

                try

                {

                    if (!ds.Tables[0].Columns.Contains("项目编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("项目编号", typeof(int))); //临时表datatable中没有此列则创建

                    }

                    if (!ds.Tables[0].Columns.Contains("产品编号"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("产品编号", typeof(int)));



                    }

                    if (!ds.Tables[0].Columns.Contains("电信反馈时间"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("电信反馈时间", typeof(DateTime)));



                    }

                    if (!ds.Tables[0].Columns.Contains("文件导入日期"))

                    {

                        ds.Tables[0].Columns.Add(new DataColumn("文件导入日期", typeof(DateTime)));



                    }

                    foreach (DataRow dr in ds.Tables[0].Rows)

                    {

                        dr["项目编号"] = projectID;

                        dr["产品编号"] = productID;

                        dr["电信反馈时间"] = input_date;

                        dr["文件导入日期"] = input_date;

                    }



                    using (SqlBulkCopy sbc = new SqlBulkCopy(Properties.Settings.Default.QZMDBConnectionString))

                    {

                        sbc.DestinationTableName = "tbFeedBack";//对应的数据库表名

                        sbc.ColumnMappings.Clear();

                        sbc.ColumnMappings.Add("项目编号", "project_id");//关联ds.tables[0]中的列和数据库中的列明

                        sbc.ColumnMappings.Add("产品编号", "product_id");

                        sbc.ColumnMappings.Add("电信反馈时间", "fb_dt");

                        sbc.ColumnMappings.Add("文件导入日期", "input_dt");





                        sbc.ColumnMappings.Add("手机号码", "mobile");

                        sbc.ColumnMappings.Add("在网情况", "fb_online");

                        sbc.ColumnMappings.Add("订购是否成功", "fb_order_result");

                        sbc.ColumnMappings.Add("离网日期", "fb_leave_dt");

                        sbc.BatchSize = 1000;  //设置每次放入条数

                        sbc.WriteToServer(ds.Tables[0]);

                    }

                    return ds.Tables[0].Rows.Count;

                }

                catch (Exception ex)

                {

                    System.Windows.Forms.MessageBox.Show(ex.Message);

                    return 0;

                }



            }

            return 0;

        }

        public DataSet CSV_Getds(string filePath)

        {



            try

            {

                string[] name = GetTablesFromOleDb(filePath);

                string a = name[0].Replace("'", "");

                string OLEDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +

                                    "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取

                                    "data source=" + filePath;

                OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);

                DataSet sourceDataTable = new DataSet();

                oda.Fill(sourceDataTable);

                oda.Dispose();

                return sourceDataTable;

            }

            catch (Exception ex)

            {

                System.Windows.Forms.MessageBox.Show(ex.Message);

                return null;

            }



        }



    }



    }

  

你可能感兴趣的:(Excel)