热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

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

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

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

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

先看看界面,登录界面:

主界面:

主要代码:

1.excel文件读到DataTable

///

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

///

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.批量把数据导入到数据库

1SQL 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;

}

}

}

}

2oracle版本

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

{

dt.Rows[n].SetAdded();

}

//adapter.UpdateBatchSize = 1000;

adapter.Update(dt);

}

return true;

}

catch (Exception e)

{

throw e;

}

}

3导出EXCEL文件

///

///保存excel文件,覆盖相同文件名的文件

///

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;

}

}

///

///多个表格导出到一个excel工作簿

///

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

{

dt = db.DB.ReturnDataTable(sqls[i]);

SaveExcel(SheetNames[i], dt, package);

}

package.Save();

}

}

///

///单个表格导出到一个excel工作簿

///

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();

}

}

///

///单个表导出到多个excel工作簿(分页)

///

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();

}

}

}

4.DataPie下载地址

https://github.com/yfl8910/DataPie


推荐阅读
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍如何使用 Sortable.js 库实现元素的拖拽和位置交换功能。Sortable.js 是一个轻量级、无依赖的 JavaScript 库,支持拖拽排序、动画效果和多种插件扩展。通过简单的配置和事件处理,可以轻松实现复杂的功能。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
author-avatar
雷神鑫源义_341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有