`
nanyjm
  • 浏览: 9485 次
社区版块
存档分类
最新评论

excel操作组件1.0源码

阅读更多
  雏形版本 Excel导入导出组件

  随着项目的完工,组件的开发也相继完成,它已经不只是一个想法,一个雏形,一个玩具。它实实在在的在项目中被使用,被完善。

  它记录了我的一段开发历程,是我做为一个程序技术人员的见证。今天我把源码及使用文档公布出来,给需要的人提供帮助。

分享到:
评论
19 楼 guooscar 2009-03-18  
Joo 写道
正在做同样的东东,不知道楼主有没有考虑过大数据量Excel文件导入导致内存溢出的问题

HSSFWorkbook wb=new HSSFWorkbook(new FileInputStream(fileName));


这一句就直接抛出OOM异常

引用

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.apache.poi.hssf.usermodel.HSSFRow.createCellFromRecord(HSSFRow.java:181)
        at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:182)
        at org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:123)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:264)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:168)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:297)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:278)
        at javaapplication4.Main.main(Main.java:30)



请问你是怎么处理的?



试试Fastexcel 吧,应该不会溢出的http://fastexcel.sourceforge.net/
18 楼 tyra 2009-03-18  
太感谢了,正好用上~!
17 楼 wanwok 2008-10-30  
听起来有意思,下来看看,谢谢搂主分享
16 楼 saint2004 2008-10-30  
jxl使用这个包了啦吗
15 楼 miaomiao0307 2008-07-23  
下来看看哈:)
14 楼 sangood 2008-07-23  
另外,感觉楼主回写机制不是很好,每个model里面都得设置flag和message,对原来的程序影响比较大。
13 楼 sangood 2008-07-23  
另外为javabean的Date类型赋值的时候,类型不匹配。 楼主的//出生日期private String birthDate;是String类型?
12 楼 sangood 2008-07-22  
请教一下楼主,fixity设置为yes的时候,不可能设置函数,我想在程序里面设置默认值比如当前时间,该怎么样设置呢?

/*
* 在excel中没有列数据,需要系统对javabean属性中的某一个值设置一个动态传入的值(指所有JavaBean的这个属性值,都是统一传入的固定值).设置些属性,必须设置默认值
*
* 他的值设置为 fixity = "yes" ,默认为 no.
*/
11 楼 shellkk 2008-07-22  
nanyjm 写道

我测试过的数据
导入:10000行。(20个字段信息)
导出:23000行。(4个字段信息)
我也有这个问题,正在想办法解决。


1.不要用map,用array,可以大幅度的降低内存开销
2.用native type,比对应的object大约可以减小一半内存
3.采取类似于stream的读写方式
10 楼 sangood 2008-07-22  
感谢楼主,我正需要啊!
9 楼 sunny-chance 2008-06-05  
我不喜欢写配置文件
8 楼 zack 2008-06-02  
感觉感谢楼主的努力!
7 楼 nanyjm 2008-06-02  

我测试过的数据
导入:10000行。(20个字段信息)
导出:23000行。(4个字段信息)
我也有这个问题,正在想办法解决。
6 楼 Joo 2008-05-31  
正在做同样的东东,不知道楼主有没有考虑过大数据量Excel文件导入导致内存溢出的问题

HSSFWorkbook wb=new HSSFWorkbook(new FileInputStream(fileName));


这一句就直接抛出OOM异常

引用

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.apache.poi.hssf.usermodel.HSSFRow.createCellFromRecord(HSSFRow.java:181)
        at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:182)
        at org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:123)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:264)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:168)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:297)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:278)
        at javaapplication4.Main.main(Main.java:30)



请问你是怎么处理的?
5 楼 h819 2008-05-30  
我这个没有考虑表头等信息,只是读取正文第每个单元格的内容。

实际上,excel就是一个大的二维表,就像二维数组一样,只不过每行的单元格数目不同,如下面的形式:
1,1,1,1
2,2,2,2,2,2
3,3,3,3,3
4,4,4

共四行,每行的单元格数目不同

第一行:四个单元格
第二行:六个单元格
第三行:五个单元格
第四行:三个单元格

我就想用一个数据结构能保存上面的信息,并且保留每个单元格的具体位置信息,如我在这个数据结构中想要第三行第二个数据,那么他的位置应该在[3,2]
对应 TreeMap<3, Map<2, "china">>

我不知道有没有一个现成的数据结构,保存二维表,并且能有其位置信息。

我没有考虑效率什么的,没有再具体的深入研究,在我日常的应用中,我觉得够了。

如果把一个 excel 内容都得到了,具体的更进一步的比较等,就是后话了。
4 楼 nanyjm 2008-05-30  
楼上的数据的读取,存储我回仔细研究。
Excel操作的时候,下面两点很重要。
1、Excel读取的时候,要取能识别表头及标题,从列标题的下一行开始读取。
2、读取完成之后,还要回写消息。把有问题的记录回写给用户,修改后,重新上传。有问题的记录包括两部分,一部分是格式验证未通过(使用文档中有说明)。一部分是业务验证未通过的记录(如:重复记录)。
3 楼 h819 2008-05-29  
对于读取 excle,我用这样的类型来保存数据

TreeMap<Integer, Map<Integer, String>>
用 map 来保存数据,可以同时保存行列号,如 把 "china" 保存在 第3行,第5列

TreeMap<3, Map<5, "china">>

读出excel中的数据之后,把内容都填充到 TreeMap 中,返回它就可以了,这样得到了一个大的 TreeMap,里面包含了若干个小的TreeMap,不用管内容是否变化啊

可能效率有问题吧,我没有大量的数据,至多几千个,所以用起来没什么问题。


源代码,没怎么整理,凑合看吧,用的是 jxl

public TreeMap<Integer, Map<Integer, String>> readExcel(File file) {

// TreeSet 继承了 SortedMap 接口,是有序的
// 之所以选择 Map,是因为它可以保存列数和行数,有对应关系
TreeMap<Integer, Map<Integer, String>> mapAllLine = new TreeMap<Integer, Map<Integer, String>>();
Workbook wb = null;

try {

// 构造Workbook(工作薄)对象
wb = Workbook.getWorkbook(file);
if (wb == null)
return null;

// 获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[] sheets = wb.getSheets();
if (sheets == null || sheets.length <= 0)// 空表
return null;

log.info("=============  总 sheet 数是: " + sheets.length);

// == 开始操作工作表

// 对每个工作表进行循环
for (int sheetNum = 0; sheetNum < sheets.length; sheetNum++) {

// 得到当前工作表的行数
int rowNum = sheets[sheetNum].getRows();
log.info("=============  当前 sheet 数是: " + (sheetNum + 1));

// sheet 中内容为空的时候,退出
if (rowNum == 0 && sheetNum < sheets.length) {

log.info("============= " + (sheetNum + 1)
+ " sheet 中内容为空,继续下一个 sheet ");
continue;
}

// 循环当前 sheet
for (int i = 0; i < rowNum; i++) {// for1

// 用来存储当前行的数据,为顺序存储
Map<Integer, String> mapColumn = new TreeMap<Integer, String>();
// 得到当前工作表的当前行的所有单元格
Cell[] cells = sheets[sheetNum].getRow(i);
int cellsSize = cells.length;
// log.info("cells size: " + cellsSize);

for (int j = 0; j < cellsSize; j++) {
// System.out.println("read:"+cells[j].getType().equals(CellType.DATE));
mapColumn.put(j + 1, cells[j].getContents().trim());// j+1,i+1避免出现
// 0 行
// 0 列
}
mapAllLine.put(i + 1, mapColumn);

}
}

} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 最后关闭资源,释放内存
wb.close();
return mapAllLine;
}
}



2 楼 mingyuan 2008-05-29  
真是不错~谢谢楼主分享!
1 楼 citysir 2008-05-29  
我先下载来看看

相关推荐

    Excel操作组件1.0.rar

    标签“excel”、“Excel操作组件”和“Excel组件”进一步确认了这个压缩包的内容与Excel处理有关,它可能是一个专门用来操作Excel的Java库,支持常见的Excel操作,如数据导入、导出、格式化、计算等。 压缩包内的...

    神级Excel数据图表插件安装包Excel_EasyCharts1.0.zip

    Excel EasyCharts 1.0是一款强大的Excel数据图表插件,专为提高数据分析和可视化效率而设计。这款插件能够帮助用户快速创建出专业且美观的数据图表,尤其适用于那些需要处理大量数据并进行复杂分析的场合。它提供了...

    1350多个精品易语言模块

    edb 数据库转Excel模块 1.0.ec edb数据库转Excel模块 1.3.ec edb转xls.ec eOgre.ec errcode.ec EtfAPI.ec EtfAPI30.ec ETimeFly API模块.ec Exact.ec excels.ec excel保存.ec Excel功能模块.ec EXE→SWF 转换模块.ec...

    UReport2报表引擎 v1.0-源码.zip

    《UReport2报表引擎 v1.0 源码解析及学习指南》 UReport2报表引擎是一款功能强大的报表设计工具,专为Java平台打造,提供了丰富的报表设计能力,能够满足企业级应用中的复杂报表需求。其v1.0版本的源码分析,对于...

    ASP源码—Excel二维表转文本工具 v1.0.zip

    这个"ASP源码—Excel二维表转文本工具 v1.0.zip"压缩包包含了一个利用ASP技术实现的功能,即把Excel二维表格数据转换为文本格式。这种功能在数据处理、报表生成和信息交换等场景中非常有用。 在ASP中,实现Excel...

    unity导表工具源码v1.0

    在实际应用中,Unity导表工具源码v1.0可能包含以下关键组件: 1. **Excel读取模块**:使用.NET Framework提供的COM接口或者第三方库(如EPPlus)来读取Excel文件内容。 2. **Json序列化模块**:如使用Newtonsoft....

    每天提醒写工作日志的小软件 V1.1

    而“C#”和“excel格式”的标签则揭示了其技术实现方式和数据存储格式,为熟悉这些技术的用户提供了更多的操作便利。 最后,压缩包中的“EasyWorkReport”可能是该软件的主程序文件或者安装包。用户下载并解压后,...

    美萍超市管理系统源码(C#)V1.0

    总的来说,美萍超市管理系统源码是一份值得学习和研究的案例,对于理解和实践C#编程、三层架构设计、数据库操作以及商业逻辑处理有着很高的参考价值。无论是初学者还是经验丰富的开发者,都能从中获取宝贵的知识和...

    学生信息管理系统v1.0(附源码).zip

    VB支持Crystal Reports或Microsoft Report Viewer等第三方组件,可以方便地创建定制化的报表,并导出为PDF或Excel格式。 6. 错误处理与调试:在开发过程中,VB的调试工具如断点、监视窗口等可以帮助开发者查找并...

    ASP源码—查立得快搜系统(ASP+xls) v1.0.zip

    总的来说,"ASP源码—查立得快搜系统(ASP+xls) v1.0.zip"是一个学习ASP与Excel数据操作的好例子,对于初学者,可以通过这个项目了解如何在服务器端利用ASP处理非传统数据库格式的数据。同时,对于开发者来说,这也是...

    易语言模块大全(共775个模块)

    超速读取网页源码(1.0).zip 窗口或窗口组件透明模块(1.0).zip 读易库到超级列表框(1.0).zip DES加解密模块(1.0).zip DIY热键框_模块(1.0).zip DLL注入模块(1.0).zip dqf1996(1.0).zip 导出数据(1.21).zip 导出数据...

    Excel操作类(含源码)-易语言

    2. "Excel操作类.ec":这是易语言的编译模块文件,可以直接在易语言环境中作为组件引用,供程序调用Excel相关的功能。 总的来说,这个压缩包为易语言开发者提供了一个方便的工具,使他们能够快速集成Excel文件处理...

    Word2000&XP中内部COM插件的编程实现(源码)(1.0).zip_COM Excel_Word 插件_ms excel

    在IT领域,COM(Component Object Model)是一种组件对象模型,由微软公司开发,用于构建可交互操作的应用程序。COM提供了一种标准的方式,使得不同语言编写的组件可以互相调用和协作。本主题主要探讨如何在Word2000...

    Excel二维表转文本工具 v1.0

    这可能通过使用如Microsoft Jet Engine(或者更现代的ACE OLEDB Provider)这样的组件来实现,这些组件可以连接到Excel文件并获取数据。 3. 数据转换:解析出的数据会被转换为文本格式,每个单元格的数据独立成行,...

    易语言700模块打包

    超速读取网页源码(1.0).zip 窗口或窗口组件透明模块(1.0).zip 读易库到超级列表框(1.0).zip DES加解密模块(1.0).zip DIY热键框_模块(1.0).zip DLL注入模块(1.0).zip dqf1996(1.0).zip 导出数据(1.21).zip ...

    【开源】自制小工具集1.0,包括压缩、解压、excel转图片

    PyQt5提供了丰富的组件和API,使得开发者能够轻松创建美观且功能齐全的桌面应用。在这个小工具集中,PyQt5被用来设计和实现用户友好的界面,让用户能够直观地操作各个工具。 3. **文件压缩与解压**:小工具集包含了...

    Excel打印信封、制证(源码,带XlsReadWriteII 3.0)-1.0.7z

    标题中的“Excel打印信封、制证(源码,带XlsReadWriteII 3.0)-1.0.7z”表明这是一个基于Delphi开发的项目,它提供了功能来打印信封和制作证书,并且依赖于XlsReadWriteII 3.0组件,这是一个用于读写Microsoft ...

    ASP实例开发源码-asp在线数据库管理工具 v1.0.zip

    这个"ASP实例开发源码-asp在线数据库管理工具 v1.0.zip"文件包含了一个基于ASP技术构建的在线数据库管理系统源代码,版本为1.0。这个工具可能允许用户通过Web界面进行数据库的查询、添加、修改和删除操作,极大地...

    IReport v1.0 用户手册

    IReport是基于Eclipse RCP(Rich Client Platform)框架构建的,提供了一个全功能的报表设计环境,具有丰富的特性集,包括WYSIWYG(所见即所得)编辑、拖放式组件布局、XML源码查看以及预览功能。通过这个工具,...

Global site tag (gtag.js) - Google Analytics