用poihssf处理excel表格

用poihssf处理excel表格

ID:35225567

大小:69.66 KB

页数:10页

时间:2019-03-22

用poihssf处理excel表格_第1页
用poihssf处理excel表格_第2页
用poihssf处理excel表格_第3页
用poihssf处理excel表格_第4页
用poihssf处理excel表格_第5页
资源描述:

《用poihssf处理excel表格》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、用POIHSSF处理EXCEL表格POI的主页:http://jakarta.apache.org/poiPOIHSSF的QuickGuide,教初学者如何快速上手使用POIHSSF:http://jakarta.apache.org/poi/hssf/quick-guide.html笔者据使用经验以为:POIHSSF是当今市面上最强大的处理EXCEL表格的java工具,比韩国人写的那个JExcelApi或其它几种工具都要好。而且它是Apache的开源项目。当然POIHSSF也有缺点:不能直接支持EXCEL图表,API文档粗糙简略,有些类和方法需要引用Apache项目中的其它一

2、些包,包与包之间依赖关系比较复杂等等。本文内容不在于提供一个POIHSSF的完整使用指南(上面那个Apache主页上的QuickGuide已经非常详细),而是列出一些笔者在项目开发过程中找到的一些技巧、经验。下图是定义的模板PoiTest.xls:通过POI生成的最终结果:(单元格中的数据发生变化时,图表中的柱状、折线也会跟着变化)处理图表目前POI版本为2.5.1,org.apache.poi.hssf.usermodel包里有一个HSSFChart类,里面只有一个空方法createBarChart(),表明POI还不直接支持EXCEL图表。替代方法还是有的:因为EXCEL图

3、表的源数据引用自EXCEL单元格。我们可以先新建一个EXCEL工作薄,作为模板,在里面创建图表,指定它引用工作表中的一些特定单元格。然后我们用POI来读取这个工作薄,把数据写入到那些特定单元格。首先要在模板里创建可以动态引用单元格的“名称”,利用“名称”来创建图表中的“系列”。一、打开模板PoiTest.xls,点击[插入]>[名称]>[定义],创建四个“名称”sx,s1y,s2y,s3y:sx=OFFSET(Sheet1!$A$17,0,2,1,COUNTA(Sheet1!$17:$17)-4)s1y=OFFSET(Sheet1!$A$18,0,2,1,COUNTA(Shee

4、t1!$18:$18)-4)s2y=OFFSET(Sheet1!$A$19,0,2,1,COUNTA(Sheet1!$19:$19)-3)s3y=OFFSET(Sheet1!$A$20,0,2,1,COUNTA(Sheet1!$20:$20)-3)这里用到了两个EXCEL函数,OFFSET()和COUNTA()函数。其中COUNTA()可以返回一行或一列的单元格总数:比如COUNTA(Sheet1!$A:$A),计算工作表Sheet1的A列的单元格数目。又比如COUNTA(Sheet1!$17:$17),计算的是Sheet1的第17行的单元格数目。当我们没有在单元格里键入数据时

5、,该单元格是不会被COUNTA()计算的。OFFSET()函数用来引用一系列连续的单元格,它共有五个参数:参数一,作为位置参照的单元格。参数二,行的起始偏移量(以参数一为参照)。参数三,列的起始偏移量(以参数一为参照)。参数四,跨行数。参数五,跨列数。比如:OFFSET(Sheet1!$A:$1,1,2,3,4),表示引用范围为:C2:F4。二、在模板中创建图表,在图表上点右键,选择[源数据]>[系列],如图建立三个系列:点[添加]创建新的系列:[名称]表示系列名,可以直接输入字串,也可以引用EXCEL单元格。在[值]中输入我们在上一步中创建的“名称”,格式为:模板名.xls!

6、名称。在[分类(X)轴标志(T)]中输入我们在上一步中创建的“名称”sx,格式为:模板名.xls!名称。它表示图表区域的X轴将要显示的内容。三、用POI把数据写入到相应的单元格中,图表将会自动显示对应的信息。注意:上面这种方法适用数据集合行数固定而列数动态变化的情况。对于行数也动态变化的情况,只能先在模板里预设尽可能多的“名称”和“系列”。对于行数和列数都固定的情形,没必要这么复杂,只要在图表的[源数据]里设置[数据区域],使之引用EXCEL模板中的一定范围,如下图: 设置单元格样式 HSSFCellStyle类代表一种单元格样式。可以通过这个类来设置单元格的边框样式、背景颜色

7、、字体、水平和垂直对齐方式等等。HSSFCellStyletitleStyle=workbook.createCellStyle();  titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);  titleStyle.setBorderLeft((short)1);  titleStyle.setBorderRight((short)1);  titleStyle.setBorderTop(HSSFCellStyle.BORDER_D

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。