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

先看看界面。

登录界面:

主界面:

主要代码:

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

}

}

}

4.DataPie下载地址

http://datapie.codeplex.com/releases/view/88081

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

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

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

  2. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

  3. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

  4. arcgis开发 多版本之间如何兼容_arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)...

    你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...

  5. vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)

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

  6. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  7. java技术分享主题_Java开发入门:适合新手练手的Java项目(附源码下载)

    Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个神话.虽然不少人曾抱怨Java语言就像老太太的裹脚布,又臭又长,有时写了500行都不能表达程序员的意图. 但从市场 ...

  8. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

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

  9. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

最新文章

  1. FormData上传文件同时附带其他参数
  2. GetHashCode() 的研究
  3. 【两种解法】he Falling Leaves UVA - 699
  4. docker与jenkins学习
  5. python中until函数_等待应用程序窗口:python中的pywinauto.timings.WaitUntilPasses
  6. TiDB 在平安核心系统的引入及应用
  7. 计算机工程主编陶小雪,城市环境所在MOFs基催化剂的制备和VOCs催化氧化方面取得进展...
  8. Python黑帽子 黑客与渗透测试编程之道(三)取代netcat
  9. Android友盟分享(微信简单集成)
  10. sql server 日期条件-上月、年初、同期
  11. 三个因素剖析质量流量计读数不准,应对故障更轻松
  12. LED发光二极管限流电阻的计算
  13. linux xmanager 网络端口 177,通过xmanager连接linux系统
  14. 武汉有哪些大学 计算机专业比较强,武汉有哪些计算机好的大学排名
  15. 荣耀50手机系列正式发布,售价2399元起,主要竞争对手瞄准苹果
  16. js报错- cannot set property xxx of undefined
  17. 【听】人性的弱点,人际关系交往的鸡汤宝典
  18. Dplayer Blob对视频播放地址加密
  19. 单词测试通关学英语的软件,学习软件有哪些,给大家推荐一款靠谱的 | 外教英评网...
  20. RGB和HSV区别与互相转换

热门文章

  1. C++赋值运算符和拷贝构造函数区别
  2. QT绘制水平百分比条形图。
  3. QT实现自定义3D材质
  4. Thread——线程
  5. Android Studio OkHttp的使用
  6. 07_设置坐标轴刻度、设置刻度标签(Setting Tick Labels)、调整刻度标签 (Adjusting the ticklabels)
  7. Sqoop导入导出的时候总是出现等待5分钟的问题解决办法
  8. SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)
  9. SQLite 命令(http://www.w3cschool.cc/sqlite/sqlite-commands.html)
  10. CXF的Spring注解配置及使用