POI学习

POI之HSSF学习(二)

以前仅仅是对一个单元格设置值,没有涉及到格式的问题,我们可以设置丰富的格式,比如一个单元格的边框,字体,颜色,背景颜色等等,(这里有一个限制,就是对于一个单元格内还不能够写入丰富文本)。

在HSSF中专门有一个类来保存格式相关的信息HSSFCellStyle,得到一个风格描述HSSFCellStyle cs = workbook.createCellStyle();

对一个cell设置风格cell.setCellStyle(HSSFCellStyle)

在HSSFCellStyle中包括了字体,边框,颜色等信息。在HSSF中用到的字体类是不同于JAVA中的字体类的。

HSSFCellStyle cs = workbook.createCellStyle();//创建一个style

HSSFFont littleFont = workbook.createFont();//创建一个Font

littleFont.setFontName("SimSun");

littleFont.setFontHeightInPoints((short)7);

cs.setFont(littleFont);//设置字体

cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

cs.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直举重

cs.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框

cs.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框

cs.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

cs.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框



我们经常有的一个操作就是合并单元格,在HSSF中合并单元格是如下的操作

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");

HSSFRow row = sheet.createRow((short) 1);
HSSFCell cell = row.createCell((short) 1);
cell.setCellValue("This is a test of merging");

sheet.addMergedRegion(new Region(1,(short)1,1,(short)2));//指定合并区域

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
合并区域是分别指定起始和终了的列和行,都是从0开始

下面实现的方法来填充一个区域,可以指定style

public void fillMergedRegion(HSSFWorkbook workbook,HSSFSheet sheet, Region region, String text, HSSFCellStyle cs) {

setRegionStyle(workbook, sheet, region, cs);

HSSFRow row;

HSSFCell cell;

row = sheet.getRow(region.getRowFrom());

cell = row.getCell(region.getColumnFrom());

cell.setCellValue(text);

sheet.addMergedRegion(region);

}

public void setRegionStyle(HSSFWorkbook workbook, HSSFSheet sheet, Region region, HSSFCellStyle cs) {

int toprowNum = region.getRowFrom();

for (int i = region.getRowFrom(); i <= region.getRowTo(); i ++) {

HSSFRow row = HSSFCellUtil.getRow(i, sheet);

for (int j = region.getColumnFrom(); j <= region.getColumnTo(); j++) {

HSSFCell cell = HSSFCellUtil.getCell(row, (short)j);

cell.setCellStyle(cs);

}

}

}

要做到对一个区域设置style的话,应该对整个区域的cell都设定同样的style来达到目的。



还有一个比较重要的就是设置公式,可以让其自动来进行计算。在HSSF中设置公式是相当容易的,专门有一个方法

cell.setCellFormula(formula);

formula就是一个公式的字符串。

这里还有涉及到的一个坐标的转换问题,在HSSF中是使用行,列来进行,而excel中公式的使用是A1,AB2等等类似的方式。

下面的一个方法实现了坐标的转换。

public static String convertCoordinate(int row, short col) {

int a = col / 26;

int b = col % 26;



StringBuffer XS = new StringBuffer("");

if (a > 0 && a <=9) {

XS = XS.append((char)('@' + a));

}



XS.append((char)('A' + b));

return XS.toString() + (row + 1);

}



基本的操作也就如此,在使用过程中觉得有些不习惯的就是使用的长度单位,在有些方法里面是这个单位,有的方法里面又是另外一个单位,比较的混乱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值