`
Merrygrass
  • 浏览: 165021 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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);

        }



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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics