C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS

C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)

时间:2012-05-20 11:16来源:未知 作者:admin 点击: 3984次我要投稿  高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等

先看看工具界面:

登录界面:
 
主界面:
 
 
 
主要代码:
1.excel文件读到DataTable
 
        ///<summary>
        ///根据excel路径和sheet名称,返回excelDataTable
        ///</summary>
        public static DataTable GetExcelDataTable(string path, string tname)
        {
            /*Office 2007*/
            string ace = "Microsoft.ACE.OLEDB.12.0";
            /*Office 97 - 2003*/
            string jet = "Microsoft.Jet.OLEDB.4.0";
            string xl2007 = "Excel 12.0 Xml";
            string xl2003 = "Excel 8.0";
            string imex = "IMEX=1";
            /* csv */
            string text = "text";
            string fmt = "FMT=Delimited";
            string hdr = "Yes";
            string conn = "Provider={0};Data Source={1};Extended Properties="{2};HDR={3};{4}";";
            string select = string.Format("SELECT * FROM [{0}$]", tname);
            //string select = sql;
            string ext = Path.GetExtension(path);
            OleDbDataAdapter oda;
            DataTable dt = new DataTable("data");
            switch (ext.ToLower())
            {
                case ".xlsx":
                    conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex);
                    break;
                case ".xls":
                    conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex);
                    break;
                case ".csv":
                    conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt);
                    //sheet = Path.GetFileName(path);
                    break;
                default:
                    throw new Exception("File Not Supported!");
            }
            OleDbConnection con = new OleDbConnection(conn);
            con.Open();
            //select = string.Format(select, sql);
            oda = new OleDbDataAdapter(select, con);
            oda.Fill(dt);
            con.Close();
            return dt;
        }
2.批量把数据导入到数据库
1)SQL SERVER版本
    public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                {
                    bulkCopy.DestinationTableName = TableName;
                    foreach (string a in maplist)
                    {
                        bulkCopy.ColumnMappings.Add(a, a);
                    }
                    try
                    {
                        bulkCopy.WriteToServer(dt);
                        return true;
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
            }
        }
2)oracle版本 
public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
        {
 
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
 
                connection.Open();
 
                using (OracleBulkCopy bulkCopy = new OracleBulkCopy(connection))
                {
 
                    bulkCopy.DestinationTableName = TableName;
 
                    foreach (string a in maplist)
                    {
 
                        bulkCopy.ColumnMappings.Add(a, a);
 
                    }
 
                    try
                    {
 
                        bulkCopy.WriteToServer(dt);
 
                        return true;
 
                    }
 
                    catch (Exception e)
                    {
                        throw e;
 
                    }
                }
           }
        }
 
3ACCESS版本
public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
        {
            try
            {
                using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    connection.Open();
                    OleDbDataAdapter adapter = new OleDbDataAdapter("select * from " + TableName + " where 1=0", connection);
                    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                    int rowcount = dt.Rows.Count;
                    for (int n = 0; n < rowcount; n++)
                    {
                        dt.Rows[n].SetAdded();
                    }
                    //adapter.UpdateBatchSize = 1000;
                    adapter.Update(dt);
                }
                return true;
            }
            catch (Exception e)
            {
                throw e;
            }
       
       
        }
 
 
3.导出EXCEL文件
///<summary>
        ///保存excel文件,覆盖相同文件名的文件
        ///</summary>
        public static bool SaveExcel(string SheetName, DataTable dt, ExcelPackage package)
        {
 
            try
            {              
                ExcelWorksheet ws = package.Workbook.Worksheets.Add(SheetName);
                ws.Cells["A1"].LoadFromDataTable(dt, true);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 
        ///<summary>
        ///多个表格导出到一个excel工作簿
        ///</summary>
        public static void export(IList<string> SheetNames, string filename, DBConfig db, IList<string> sqls)
        {
            DataTable dt = new DataTable();
            FileInfo newFile = new FileInfo(filename);
            if (newFile.Exists)
            {
                newFile.Delete();
                newFile = new FileInfo(filename);
            }
            using (ExcelPackage package = new ExcelPackage(newFile))
            {
                for (int i = 0; i < sqls.Count; i++)
                {
                    dt = db.DB.ReturnDataTable(sqls[i]);
                    SaveExcel(SheetNames[i], dt, package);
                }
                package.Save();
            }
        }
 
        ///<summary>
        ///单个表格导出到一个excel工作簿
        ///</summary>
        public static void export(string SheetName, string filename, DBConfig db, string sql)
        {
            DataTable dt = new DataTable();
            FileInfo newFile = new FileInfo(filename);
            if (newFile.Exists)
            {
                newFile.Delete();
                newFile = new FileInfo(filename);
            }
            using (ExcelPackage package = new ExcelPackage(newFile))
            {
                dt = db.DB.ReturnDataTable(sql);
                SaveExcel(SheetName, dt, package);
                package.Save();
            }
        }
 
        ///<summary>
        ///单个表导出到多个excel工作簿(分页)
        ///</summary>
        public static void export(string SheetName, string filename, DBConfig db, string sql, int num, int pagesize)
        {
            DataTable dt = new DataTable();
            FileInfo newFile = new FileInfo(filename);
            int numtb = num / pagesize + 1;
            for (int i = 1; i <= numtb; i++)
            {
                string s = filename.Substring(0, filename.LastIndexOf("."));
                StringBuilder newfileName = new StringBuilder(s);
                newfileName.Append(i + ".xlsx");
                newFile = new FileInfo(newfileName.ToString());
                if (newFile.Exists)
                {
                    newFile.Delete();
                    newFile = new FileInfo(newfileName.ToString());
                }
                using (ExcelPackage package = new ExcelPackage(newFile))
                {
                    dt = db.DB.ReturnDataTable(sql, pagesize * (i - 1), pagesize);
                    SaveExcel(SheetName, dt, package);
                    package.Save();
                }
            }
        }
 
原文地址:https://www.cnblogs.com/sczw-maqing/p/3180566.html