转自:http://www.cnblogs.com/yfl8910/archive/2012/05/19/2509194.html

作为财务数据核算人员,面对大量的业务与财务数据,借助于传统的EXCEL表格,已经力不从心。最近几个月,利用周末及下班的空闲时间,写了一个数据库导入导出工具,以方便业务逻辑密集型的数据处理。目前,DataPie支持百万级别的数据导出,对于几十万的数据导入,也轻松应付。

源码及安装包下载地址:https://github.com/yfl8910/DataPie

先看看界面,登录界面:

主界面:

主要代码:

1.excel文件读到DataTable

        ///<summary>

        ///根据excel路径和sheet名称,返回excel的DataTable

        ///</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;

                    }

                }

            }

        }

3)ACCESS版本

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 = ; 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 = ; 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 + ;

            for (int i = ; i <= numtb; i++)

            {

                string s = filename.Substring(, 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 - ), pagesize);

                    SaveExcel(SheetName, dt, package);

                    package.Save();

                }

            }

        }

4.DataPie下载地址

https://github.com/yfl8910/DataPie

C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)[转]的更多相关文章

  1. arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  2. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  3. Octopus——excel导入导出工具

    Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...

  4. java简易excel导入导出工具(封装POI)

    Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...

  5. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

  6. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  7. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  8. openlayers4 入门开发系列之地图导航控件篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

随机推荐

  1. nodejs express 框架解密2-如何创建一个app

    本文是基于express 3.4.6 的 1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function( ...

  2. windbg-bp、 bm、 bu、 bl、 bc、 ba(断点、硬件断点)

    bp bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会自动找到MyApp!SomeFunction 对 ...

  3. 清除mac os svn密码命令行缓存

    删除认证缓存设置即可,如下:rm -rf ~/.subversion/auth by yytong

  4. dWebBrowser常用知识点

    1.webbrowser调用的就是本机IE,并且webbrowser默认就是运行在IE7 mode下,除非你改变它. 2.不装IE,无法用webbrowser. 3.设置WebBrowser在IE9 ...

  5. oracle create table(转)

    //建测试表 create table dept( deptno number(3) primary key, dname varchar2(10), loc varchar2(13) ); crea ...

  6. managed_shared_memory.construct造成的性能损失

    boost中的IPC进程间通信非常好用,可以直接在共享内存上创建对象,相当于new分配器,实测发现它的分配算法还是有点耗时.第一个测试代码仅仅分配一次,然后频繁的复制,每秒钟可以复制4200次左右. ...

  7. free命令查看内存使用情况(转载)

    linux free命令查看内存使用情况 时间:2016-01-05 06:47:22来源:网络 导读:linux free命令查看内存使用情况,free命令输出结果的各选项的含义,以及free结果中 ...

  8. JS文档和Demo自动化生成工具 - SmartDoc发布

    曾几何时,当你码神附体,一路披荆斩棘的完成代码后,带着“一码在手,天下我有”的傲然环顾之时,却发现单元测试.API文档.Demo实例陆续向你砸来,顿时有木有一种冰水挑战后的感觉.而这时你应该:哟哟,快 ...

  9. 七牛portal可用性测试记

    引言:2013年年底应七牛公司朋友的邀请,给他们的Portal进行可用性测试.七牛(http://www.qiniu.com/)一直专注于云存储基础服务,在业内颇有声誉.七牛云存储的后台选用并不常用的 ...

  10. 重识JavaScript 之 数据类型的相互转换

    字符串转换数字 var a = '1'; console.log(+a); console.log(a++); console.log(-a+3); console.log(parseInt(a)); ...