以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [原创]使用OpenXml导入导出Excel2007格式的文件,支持100W行上百M的大文件 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100317) |
||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2017/5/9 15:11:00 -- [原创]使用OpenXml导入导出Excel2007格式的文件,支持100W行上百M的大文件 上次共享了一个例子,是关于如何读写大数据的文本文件的。这次我们来解决如何读写大数据的Excel文档。 本例特点如下: 1、仅支持Excel2007以上格式的Excel文档,即后缀为“.xlsx”的文档。xlsx文档支持最多1048576行16384列的数据。 2、使用微软开源的Open Xml SDK 2.0操作Excel文档。系统无需安装ms Office、wps Office等软件都可以导入导出Excel文档。 3、系统需要.net 4.0支持,win10及以上系统自带。XP、win7需要下载并安装.net 4.0,win7建议安装.net 4.52。 4、支持以流的方式读写Excel文档,内存占用小。 5、读写速度比使用COM的方式慢,小文件还是建议使用Foxtable默认的导入导出功能。 6、支持混合的单元格类型数据导入,比如Excel某列的单元格类型既有字符型,又有数值型,可以统一按照字符型进行导入。 7、支持多个表的数据导入同一个Excel的同一个Sheet中,即使是不同的列和类型,不过标题暂时只能显示第一个表的标题。 8、支持多个表的数据导入同一个Excel的不同Sheet中。 9、导入导出数据均支持选择指定名称的列。 10、从Excel导入支持选择开始导入的行和导入多少行数据,比如可以从Excel文档的第100行开始导入500行内容,同时还可以选择导出的列。 11、提供2种操作Excel文档的方式,DOM方式和SAX方式: DOM方式:需要加载全部的Excel数据,组件内存占用比较大,实测40~50M的Excel文档加载就会出现内存溢出的错误;不过速度比SAX方式稍快 SAX方式:以流的方式操作Excel数据,组件本身内存占用非常小,大概在50M左右。 12、Excel文档的第一行必须为标题行,否则可能出错。 13、目前不支持格式、合并等处理。 14、目前仅支持标准的字符型、数值型、逻辑型和日期型数据。 如果有其它类型数据测试不能操作的,可以回复上传Excel文档做分析。 使用方法: 1、把2个组件:DocumentFormat.OpenXml.dll和ExOpenXml.dll拷贝到Foxtable的安装目录下,并在项目中添加引用ExOpenXml.dll ExOpenXml.dll为对DocumentFormat.OpenXml.dll的二次封装,绕过了许多官方示例的陷阱,提供了几个导入导出函数方便使用。以后根据使用反馈在决定是否增加其它功能。 调用分为3个步骤: 一、定义一个文档操作对象ExOXExecl,并打开一个Excel文档,如果文档不存在,则创建 Dim _execl As New ExOpenXml.ExOXExecl() _execl.Open("d:\\simple.xlsx") Open语法:Open(FilePath,IsReadOnly)
除了ToExecl以外,其它函数使用建议都把IsReadOnly设置为true,不然关闭文档的时候就会再保存一次,产生不必要的开销。WriteToExecl因为是以流的方式操作的,关闭流后也就保存了文档,所以也不需要再保存一次。 二、调用操作函数,传入适当的参数,如导出DataTable数据到Excel _execl.ToExecl(CurrentTable.DataTable.Basetable) 三、操作完毕,关闭文档。一定要关闭文档,不然可能无法保存,并且一直保持对文档的占用,直到程序关闭 _execl.Dispose() 2、操作函数说明:
测试例子:
以下是一些测试数据,只是随便测试,未必准确,仅作参考,一般用户无需理会 以下内容只有回复后才可以浏览 2021-11-17 1、改正了表格数据有一些xml不支持的控制字符时导出出错的问题 需要注意的是,组件已经更新为.net 4.0的版本 2019-09-17 1、修正导入日期格式的一个bug 2017-10-25 1、修正文件名为中文名的错误 2、修正日期列的判断异常 重新下载组件复制到狐表安装目录即可 [此贴子已经被作者于2021/11/17 16:29:40编辑过]
|
||||||||||||||||||||||||||||||||||||||||
-- 作者:狐狸爸爸 -- 发布时间:2017/5/9 15:20:00 -- 收藏,学习。 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:rjh4078 -- 发布时间:2017/5/9 15:37:00 -- 开源的 内置到ft啊 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:Hopenight -- 发布时间:2017/5/9 22:57:00 -- 收藏,太有用了.... |
||||||||||||||||||||||||||||||||||||||||
-- 作者:大雪山 -- 发布时间:2017/5/9 23:17:00 -- 学习 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:李小胖 -- 发布时间:2017/5/10 10:22:00 -- 留下脚印,打数据导入 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:wei0769 -- 发布时间:2017/5/10 10:44:00 -- 加入到foxtabel中,最大好处可以随时看帮助 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:zhy400137 -- 发布时间:2017/5/22 19:50:00 -- 留下记好 |
||||||||||||||||||||||||||||||||||||||||
-- 作者:gua12gua -- 发布时间:2017/5/22 20:23:00 -- ddddddddd |
||||||||||||||||||||||||||||||||||||||||
-- 作者:blackzhu -- 发布时间:2017/5/23 8:51:00 -- 学习 |