CRM-POI基础

CRM-POI基础

它是用来干什么的

JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000,即以.xls为后缀的excel。
而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel。
POI全称 Poor Obfuscation Implementation,直译为“可怜的模糊实现”,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能。

即它是用来操作Excel的。

Excel简介

若想知道POI如何操作Excel,首先必须得对Excel的格式有所了解。
一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,
这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推。
行则使用数字表示,例如;A3 表示第三行第一列,E5表示第五行第五列。

POI的使用

1)jar包的引入
以3.10.1版本为例。
对于只操作2003 及以前版本的excel,只需要poi-3.10.1-20140818.jar ,
如果需要同时对2007及以后版本进行操作则需要另外添加:
poi-ooxml-3.10.1-20140818.jar,
poi-ooxml-schemas-3.10.1-20140818.jar,
以及在ooxml-lib目录下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。

2)简单操作实例
对.xls的Excel的操作:

    @Test
    public void testWrite03Excel() throws Exception {
        //1、创建工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //2、创建工作表
        HSSFSheet sheet = workbook.createSheet("hello world");//指定工作表名
        //3、创建行;创建第3行
        HSSFRow row = sheet.createRow(2);
        //4、创建单元格;创建第3行第3列
        HSSFCell cell = row.createCell(2);
        cell.setCellValue("Hello World");
        //输出到硬盘
        FileOutputStream outputStream = new FileOutputStream("D:\\itcast\\测试.xls");
        //把excel输出到具体的地址
        workbook.write(outputStream);
        workbook.close();
        outputStream.close();
    }

    @Test
    public void testRead03Excel() throws Exception {
        FileInputStream inputStream = new FileInputStream("D:\\itcast\\测试.xls");
        //1、读取工作簿
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
        //2、读取第一个工作表
        HSSFSheet sheet = workbook.getSheetAt(0);
        //3、读取行;读取第3行
        HSSFRow row = sheet.getRow(2);
        //4、读取单元格;读取第3行第3列
        HSSFCell cell = row.getCell(2);
        System.out.println("第3行第3列单元格的内容为:" + cell.getStringCellValue());

        workbook.close();
        inputStream.close();
    }

而对于.xlsx只是使用的对象稍有不同,步骤相同。(原来各对象的开头字母H变为X)
从上面的代码可以看出,POI中对象与Excel的对应关系为:

HSSFWorkbook Excel 工作簿workbook
HSSFSheet Excel 工作表 sheet
HSSFRow Excel 行
HSSFCell Excel 单元格

统一对03和07版的Excel的操作

从api文档中我们了解到:
HSSFWorkbook 和 XSSFWorkbook 都实现了Workbook接口;
HSSFSheet 和 XSSFSheet 实现了Sheet接口;
HSSFRow 和 XSSFRow 实现了Row接口;
HSSFCell 和 XSSFCell 实现了Cell接口;
因为这两类处理对象共同实现了对应的同一接口,届时将大大方便和简化了同时处理不同格式的excel文件的编码工作。
如;在处理03和07版本的excel文件时利用统一的接口就可以做到分析两个版本的excel数据。

同时兼容对03和07的对操作:

   @Test
    public void testRead03And07Excel() throws Exception {
        String fileName = "D:\\itcast\\测试.xlsx";
        if(fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){//判断是否excel文档

            boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$");

            FileInputStream inputStream = new FileInputStream(fileName);

            //1、读取工作簿   
            Workbook workbook = is03Excel ?new HSSFWorkbook(inputStream):new XSSFWorkbook(inputStream);
            //2、读取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            //3、读取行;读取第3行
            Row row = sheet.getRow(2);
            //4、读取单元格;读取第3行第3列
            Cell cell = row.getCell(2);
            System.out.println("第3行第3列单元格的内容为:" + cell.getStringCellValue());

            workbook.close();
            inputStream.close();
        }
    }

POI样式

上面只是简单的解决了,利用POI向Excel的读和写。可是我们的需求可不简简单单是这些。
我们可能还希望在操作Excel是可以增加Excel文档的样式,比如合并单元格、设置单元格字体、边框,背景颜色等。

合并单元格

在POI中有一个CellRangeAddress对象,中文直译是 单元格范围地址,主要用于在单元格的合并上,
这个对象的构造方法CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) 有4个参数,
分别表示(起始行号,终止行号, 起始列号,终止列号), 设置这个对象中要合并的单元格范围后,
工作表对象sheet调用方法addMergedRegion(CellRangeAddress region) ,将上述设置的CellRangeAddress对象作为参数传入即可合并单元格。

NT:当我们合并完单元格后,其它被合并的单元格已经无效了,不能对无效单元格设置值。如果进行了设置将不显示。

设置单元格样式

首先要设置单元格样式则要先初始化POI中的单元格样式对象HSSFCellStyle,
然后在样式对象中设置不同的样式(内容位置、字体、背景、颜色、边框等)。单元格样式是由工作簿workbook创建的,一个工作簿可以创建多个样式。

设置单元格内容位置:
设置水平位置 setAlignment(short align) ,
设置垂直位置 setVerticalAlignment(short align)

设置单元格字体:
POI中的字体对象为HSSFFont,字体是由工作簿创建,可以用于多个单元格上。(要加载在样式上才能作用于单元格)

设置单元格背景色:

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  //设置背景填充模式
style.setFillBackgroundColor(HSSFColor.YELLOW.index);  //设置填充背景色
style.setFillForegroundColor(HSSFColor.RED.index);     //设置填充前景色

测试一下:

    @Test
    public void testExcelStyle() throws Exception {
        //1、创建工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //1.1、创建合并单元格对象;合并第3行的第3列到第5列
        CellRangeAddress cellRangeAddress = new CellRangeAddress(2, 2, 2, 4);//起始行号,结束行号,起始列号,结束列号
        //1.2、创建单元格样式
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
        //1.3、创建字体
        HSSFFont font = workbook.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗字体
        font.setFontHeightInPoints((short) 16);//设置字体大小
        //加载字体
        style.setFont(font);

        //单元格背景
        //设置背景填充模式
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        //设置填充背景色
        style.setFillBackgroundColor(HSSFColor.YELLOW.index);
        //设置填充前景色
        style.setFillForegroundColor(HSSFColor.RED.index);

        //2、创建工作表
        HSSFSheet sheet = workbook.createSheet("Hello World");//指定工作表名
        //2.1、加载合并单元格对象
        sheet.addMergedRegion(cellRangeAddress);  //合并后成为的单元格为C2

        //3、创建行;创建第3行
        HSSFRow row = sheet.createRow(2);
        //4、创建单元格;创建第3行第3列
        HSSFCell cell = row.createCell(2);
        //加载样式
        cell.setCellStyle(style);
        cell.setCellValue("Hello World!");

        //输出到硬盘
        FileOutputStream outputStream = new FileOutputStream("D:\\itcast\\测试.xls");
        //把excel输出到具体的地址
        workbook.write(outputStream);
        workbook.close();
        outputStream.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值