C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)[转]
转自: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,附源码下载地址)[转]的更多相关文章
- arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- Octopus——excel导入导出工具
Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...
- java简易excel导入导出工具(封装POI)
Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...
- Java基础学习总结(49)——Excel导入导出工具类
在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...
- openlayers4 入门开发系列之地图导航控件篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
随机推荐
- goldengate一些参数整理
转自:http://blog.csdn.net/lemontree1123/article/details/46603549 manager参数: AUTOSTART:指定在mgr启动时自动启动那些进 ...
- WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
一.WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.AppDomain.CurrentDomain.BaseDirector ...
- 云计算的三层SPI模型
(转自:http://hi.baidu.com/fengjun8216/item/b15bbef4dcf74049922af27b) 一般而言,云计算架构可以用三层SPI模型来表述. 一.基础设施即服 ...
- 【python】日志模块
# -*- coding: utf-8 -*- """ Created on Thu Jul 09 09:36:59 2015 @author: dapenghuang ...
- HTML5 Canvas实战之刮奖效果
近年来由于移动设备对HTML5的较好支持,经常有活动用刮奖的效果,最近也在看H5方面的内容,就自己实现了一个,现分享出来跟大家交流. 1.效果 2.原理 原理很简单,就是在刮奖区添加两个canvas, ...
- Code片段 : .properties属性文件操作工具类 & JSON工具类
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...
- 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 ...
- Legolas工业自动化平台案例 —— 水源地自动化监控系统
天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...
- zk框架中利用map类型传值来创建window,并且传值
@Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...
- 装B必备词汇
这个页面用来记录遇到的所有高大上的词汇,本词汇集仅限于装B圈交流和讨论. 一致性 hash 算法(consistent hashing) http://blog.csdn.net/sparkliang ...