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

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

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

先看看界面,登录界面:

主界面:

主要代码:

1.excel文件读到DataTable

  1. ///<summary>
  2.  
  3. ///根据excel路径和sheet名称,返回excel的DataTable
  4.  
  5. ///</summary>
  6.  
  7. public static DataTable GetExcelDataTable(string path, string tname)
  8.  
  9. {
  10.  
  11. /*Office 2007*/
  12.  
  13. string ace = "Microsoft.ACE.OLEDB.12.0";
  14.  
  15. /*Office 97 - 2003*/
  16.  
  17. string jet = "Microsoft.Jet.OLEDB.4.0";
  18.  
  19. string xl2007 = "Excel 12.0 Xml";
  20.  
  21. string xl2003 = "Excel 8.0";
  22.  
  23. string imex = "IMEX=1";
  24.  
  25. /* csv */
  26.  
  27. string text = "text";
  28.  
  29. string fmt = "FMT=Delimited";
  30.  
  31. string hdr = "Yes";
  32.  
  33. string conn = "Provider={0};Data Source={1};Extended Properties=\"{2};HDR={3};{4}\";";
  34.  
  35. string select = string.Format("SELECT * FROM [{0}$]", tname);
  36.  
  37. //string select = sql;
  38.  
  39. string ext = Path.GetExtension(path);
  40.  
  41. OleDbDataAdapter oda;
  42.  
  43. DataTable dt = new DataTable("data");
  44.  
  45. switch (ext.ToLower())
  46.  
  47. {
  48.  
  49. case ".xlsx":
  50.  
  51. conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex);
  52.  
  53. break;
  54.  
  55. case ".xls":
  56.  
  57. conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex);
  58.  
  59. break;
  60.  
  61. case ".csv":
  62.  
  63. conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt);
  64.  
  65. //sheet = Path.GetFileName(path);
  66.  
  67. break;
  68.  
  69. default:
  70.  
  71. throw new Exception("File Not Supported!");
  72.  
  73. }
  74.  
  75. OleDbConnection con = new OleDbConnection(conn);
  76.  
  77. con.Open();
  78.  
  79. //select = string.Format(select, sql);
  80.  
  81. oda = new OleDbDataAdapter(select, con);
  82.  
  83. oda.Fill(dt);
  84.  
  85. con.Close();
  86.  
  87. return dt;
  88.  
  89. }

2.批量把数据导入到数据库

1)SQL SERVER版本

  1. public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
  2.  
  3. {
  4.  
  5. using (SqlConnection connection = new SqlConnection(connectionString))
  6.  
  7. {
  8.  
  9. connection.Open();
  10.  
  11. using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
  12.  
  13. {
  14.  
  15. bulkCopy.DestinationTableName = TableName;
  16.  
  17. foreach (string a in maplist)
  18.  
  19. {
  20.  
  21. bulkCopy.ColumnMappings.Add(a, a);
  22.  
  23. }
  24.  
  25. try
  26.  
  27. {
  28.  
  29. bulkCopy.WriteToServer(dt);
  30.  
  31. return true;
  32.  
  33. }
  34.  
  35. catch (Exception e)
  36.  
  37. {
  38.  
  39. throw e;
  40.  
  41. }
  42.  
  43. }
  44.  
  45. }
  46.  
  47. }

2)oracle版本

  1. public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
  2.  
  3. {
  4.  
  5. using (OracleConnection connection = new OracleConnection(connectionString))
  6.  
  7. {
  8.  
  9. connection.Open();
  10.  
  11. using (OracleBulkCopy bulkCopy = new OracleBulkCopy(connection))
  12.  
  13. {
  14.  
  15. bulkCopy.DestinationTableName = TableName;
  16.  
  17. foreach (string a in maplist)
  18.  
  19. {
  20.  
  21. bulkCopy.ColumnMappings.Add(a, a);
  22.  
  23. }
  24.  
  25. try
  26.  
  27. {
  28.  
  29. bulkCopy.WriteToServer(dt);
  30.  
  31. return true;
  32.  
  33. }
  34.  
  35. catch (Exception e)
  36.  
  37. {
  38.  
  39. throw e;
  40.  
  41. }
  42.  
  43. }
  44.  
  45. }
  46.  
  47. }

3)ACCESS版本

  1. public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
  2.  
  3. {
  4.  
  5. try
  6.  
  7. {
  8.  
  9. using (OleDbConnection connection = new OleDbConnection(connectionString))
  10.  
  11. {
  12.  
  13. connection.Open();
  14.  
  15. OleDbDataAdapter adapter = new OleDbDataAdapter("select * from " + TableName + " where 1=0", connection);
  16.  
  17. OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
  18.  
  19. int rowcount = dt.Rows.Count;
  20.  
  21. for (int n = ; n < rowcount; n++)
  22.  
  23. {
  24.  
  25. dt.Rows[n].SetAdded();
  26.  
  27. }
  28.  
  29. //adapter.UpdateBatchSize = 1000;
  30.  
  31. adapter.Update(dt);
  32.  
  33. }
  34.  
  35. return true;
  36.  
  37. }
  38.  
  39. catch (Exception e)
  40.  
  41. {
  42.  
  43. throw e;
  44.  
  45. }
  46.  
  47. }

3.导出EXCEL文件

  1. ///<summary>
  2.  
  3. ///保存excel文件,覆盖相同文件名的文件
  4.  
  5. ///</summary>
  6.  
  7. public static bool SaveExcel(string SheetName, DataTable dt, ExcelPackage package)
  8.  
  9. {
  10.  
  11. try
  12.  
  13. {
  14.  
  15. ExcelWorksheet ws = package.Workbook.Worksheets.Add(SheetName);
  16.  
  17. ws.Cells["A1"].LoadFromDataTable(dt, true);
  18.  
  19. return true;
  20.  
  21. }
  22.  
  23. catch (Exception ex)
  24.  
  25. {
  26.  
  27. throw ex;
  28.  
  29. }
  30.  
  31. }
  32.  
  33. ///<summary>
  34.  
  35. ///多个表格导出到一个excel工作簿
  36.  
  37. ///</summary>
  38.  
  39. public static void export(IList<string> SheetNames, string filename, DBConfig db, IList<string> sqls)
  40.  
  41. {
  42.  
  43. DataTable dt = new DataTable();
  44.  
  45. FileInfo newFile = new FileInfo(filename);
  46.  
  47. if (newFile.Exists)
  48.  
  49. {
  50.  
  51. newFile.Delete();
  52.  
  53. newFile = new FileInfo(filename);
  54.  
  55. }
  56.  
  57. using (ExcelPackage package = new ExcelPackage(newFile))
  58.  
  59. {
  60.  
  61. for (int i = ; i < sqls.Count; i++)
  62.  
  63. {
  64.  
  65. dt = db.DB.ReturnDataTable(sqls[i]);
  66.  
  67. SaveExcel(SheetNames[i], dt, package);
  68.  
  69. }
  70.  
  71. package.Save();
  72.  
  73. }
  74.  
  75. }
  76.  
  77. ///<summary>
  78.  
  79. ///单个表格导出到一个excel工作簿
  80.  
  81. ///</summary>
  82.  
  83. public static void export(string SheetName, string filename, DBConfig db, string sql)
  84.  
  85. {
  86.  
  87. DataTable dt = new DataTable();
  88.  
  89. FileInfo newFile = new FileInfo(filename);
  90.  
  91. if (newFile.Exists)
  92.  
  93. {
  94.  
  95. newFile.Delete();
  96.  
  97. newFile = new FileInfo(filename);
  98.  
  99. }
  100.  
  101. using (ExcelPackage package = new ExcelPackage(newFile))
  102.  
  103. {
  104.  
  105. dt = db.DB.ReturnDataTable(sql);
  106.  
  107. SaveExcel(SheetName, dt, package);
  108.  
  109. package.Save();
  110.  
  111. }
  112.  
  113. }
  114.  
  115. ///<summary>
  116.  
  117. ///单个表导出到多个excel工作簿(分页)
  118.  
  119. ///</summary>
  120.  
  121. public static void export(string SheetName, string filename, DBConfig db, string sql, int num, int pagesize)
  122.  
  123. {
  124.  
  125. DataTable dt = new DataTable();
  126.  
  127. FileInfo newFile = new FileInfo(filename);
  128.  
  129. int numtb = num / pagesize + ;
  130.  
  131. for (int i = ; i <= numtb; i++)
  132.  
  133. {
  134.  
  135. string s = filename.Substring(, filename.LastIndexOf("."));
  136.  
  137. StringBuilder newfileName = new StringBuilder(s);
  138.  
  139. newfileName.Append(i + ".xlsx");
  140.  
  141. newFile = new FileInfo(newfileName.ToString());
  142.  
  143. if (newFile.Exists)
  144.  
  145. {
  146.  
  147. newFile.Delete();
  148.  
  149. newFile = new FileInfo(newfileName.ToString());
  150.  
  151. }
  152.  
  153. using (ExcelPackage package = new ExcelPackage(newFile))
  154.  
  155. {
  156.  
  157. dt = db.DB.ReturnDataTable(sql, pagesize * (i - ), pagesize);
  158.  
  159. SaveExcel(SheetName, dt, package);
  160.  
  161. package.Save();
  162.  
  163. }
  164.  
  165. }
  166.  
  167. }

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. goldengate一些参数整理

    转自:http://blog.csdn.net/lemontree1123/article/details/46603549 manager参数: AUTOSTART:指定在mgr启动时自动启动那些进 ...

  2. WPF 获取程序路径的一些方法,根据程序路径获取程序集信息

    一.WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.AppDomain.CurrentDomain.BaseDirector ...

  3. 云计算的三层SPI模型

    (转自:http://hi.baidu.com/fengjun8216/item/b15bbef4dcf74049922af27b) 一般而言,云计算架构可以用三层SPI模型来表述. 一.基础设施即服 ...

  4. 【python】日志模块

    # -*- coding: utf-8 -*- """ Created on Thu Jul 09 09:36:59 2015 @author: dapenghuang ...

  5. HTML5 Canvas实战之刮奖效果

    近年来由于移动设备对HTML5的较好支持,经常有活动用刮奖的效果,最近也在看H5方面的内容,就自己实现了一个,现分享出来跟大家交流. 1.效果 2.原理 原理很简单,就是在刮奖区添加两个canvas, ...

  6. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  7. Solution to “VirtualBox can't operate in VMX root mode” error in Windows 7

    I was trying out various virtualization solutions on Windows 7, including Microsoft Virtual PC and V ...

  8. Legolas工业自动化平台案例 —— 水源地自动化监控系统

    天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...

  9. zk框架中利用map类型传值来创建window,并且传值

    @Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...

  10. 装B必备词汇

    这个页面用来记录遇到的所有高大上的词汇,本词汇集仅限于装B圈交流和讨论. 一致性 hash 算法(consistent hashing) http://blog.csdn.net/sparkliang ...