用POI HSSF处理EXCEL表格

本文介绍了如何使用POI HSSF处理Excel表格,包括创建动态引用单元格的名称、创建图表、设置单元格样式、合并单元格、处理公式以及链接,并特别强调了在处理中文和链接样式时的注意事项。
摘要由CSDN通过智能技术生成

处理图表

 

目前POI版本为2.5.1,org.apache.poi.hssf.usermodel包里有一个HSSFChart类,里面只有一个空方法createBarChart(),表明POI还不直接支持EXCEL图表。

替代方法还是有的:因为EXCEL图表的源数据引用自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(Sheet1!$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行的单元格数目。

当我们没有在单元格里键入数据时,该单元格是不会被COUNTA()计算的。

OFFSET()函数用来引用一系列连续的单元格,它共有五个参数:

参数一,作为位置参照的单元格。

参数二,行的起始偏移量(以参数一为参照)。

参数三,列的起始偏移量(以参数一为参照)。

参数四,跨行数。

参数五,跨列数。

比如:

OFFSET(Sheet1!$A:$1,1,2,3,4),表示引用范围为:C2:F4。

 

二、在模板中创建图表,在图表上点右键,选择[源数据]>[系列],如图建立三个系列:

点[添加]创建新的系列:

[名称]表示系列名,可以直接输入字串,也可以引用EXCEL单元格。

在[值]中输入我们在上一步中创建的“名称”,格式为:模板名.xls!名称。

在[分类(X)轴标志(T)]中输入我们在上一步中创建的“名称”sx,格式为:模板名.xls!名称。它表示图表区域的X轴将要显示的内容。

 

三、用POI把数据写入到相应的单元格中,图表将会自动显示对应的信息。

 

注意:

上面这种方法适用数据集合行数固定而列数动态变化的情况。

对于行数也动态变化的情况,只能先在模板里预设尽可能多的“名称”和“系列”。

对于行数和列数都固定的情形,没必要这么复杂,只要在图表的[源数据]里设置[数据区域],使之引用EXCEL模板中的一定范围,如下图:

 

 

 

设置单元格样式

 

HSSFCellStyle类代表一种单元格样式。可以通过这个类来设置单元格的边框样式背景颜色字体水平垂直对齐方式等等。

 

HSSFCellStyle titleStyle = workbook.createCellStyle();
  titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
  titleStyle.setBorderLeft((short)1);
  titleStyle.setBorderRight((short)1);
  titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
  titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
  titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

 

注意:如果我们定义了一种样式,把它赋给一些单元格。然后基于新的需要,更改该样式中的某个属性,再赋给另一些单元格。那么之前单元格样式的该属性也会被同时更改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于Java中的POI库来实现导入Excel表格,我可以给你提供一些帮助。POI是一个Java开发库,它能够对Microsoft Office格式的文件进行读取和操作,包括Excel文件。使用POI库,可以通过Java代码读取Excel文件中的数据,处理这些数据并将其导入到数据库或其他系统中去。 具体而言,你可以使用POI库中的HSSF和XSSF来读取和操作Excel文件。HSSF是针对Excel 97-2003格式的文件(.xls),而XSSF是针对Excel 2007或更高版本的文件(.xlsx)。你需要下载并导入POI库,然后使用Java代码调用POI中提供的API来操作Excel文件。 以下是一个简单的例子,演示如何使用POI库将Excel表格中的数据读取到Java程序中: ``` //导入POI库 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.File; import java.io.FileInputStream; import java.util.Iterator; //读取Excel文件 try { FileInputStream file = new FileInputStream(new File("file.xls")); //获取工作簿 Workbook workbook = new HSSFWorkbook(file); //获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); //遍历每一行并打印其中的数据 Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //遍历每一列并打印其中的数据 Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellTypeEnum()) { case STRING: System.out.print(cell.getStringCellValue() + "\t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "\t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\t"); break; default: } } System.out.println(""); } file.close(); } catch (Exception e) { e.printStackTrace(); } ``` 这段代码将会读取名为file.xls的Excel文件,并将其中的数据打印到控制台上。当然,这只是一个简单的例子,你还可以根据自己的需求进行更详细的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值