POI操作EXCEL03和EXCEL07以上版本

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 套件工具的读写功能。官网:http://poi.apache.org ,POI支持office的所有版本,并且在接下来的演示中需要从前端页面导入用户上传的版本不确定的excel文件,所以选择POI来讲解。在官网,下载POI :对于只操作2003 及以前版本的excel,只需要 ,如果需要同时对2007及以后版本进行操作则需要复制

引入以下jar包:
poi-3.10.1-20140818.jar(若需求为03版本的,以下两个jar包不需要引入)
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。
在POI包中有如下几个主要对象和excel的几个对象对应:

 (07以上版本与之不同是使用的XSSFWorkbook,XSSFSheet,XSSFRow,XSSFCell)
 附代码:
 

package cn.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

public class TestPOI2Excel {
    /**
     * 写入03版本excel
     * @throws Exception
     */
    @Test
    public void testWrite03Excel() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        //工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //工作表
        HSSFSheet sheet = workbook.createSheet("hello world");
        //行--index从0开始
        HSSFRow row = sheet.createRow(2);
        //创建单元格--index从0开始
        HSSFCell cell = row.createCell(2);
        cell.setCellValue("hello world");
        //输出到硬盘
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\测试.xls");
        //吧excel输入到具体的地址
        workbook.write(fileOutputStream);

        //关闭
        workbook.close();
        fileOutputStream.close();

    }

    /**
     * 读取03版本excel
     * @throws Exception
     */
    @Test
    public void testRead03Excel() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\测试.xls");
        //读取工作簿
        HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
        //读取第一个工作表
        HSSFSheet sheet = workbook.getSheetAt(0);
        //读取第三行--index从0开始
        HSSFRow row = sheet.getRow(2);
        //读取单元格--index从0开始
        HSSFCell cell = row.getCell(2);
        System.out.println(cell.getStringCellValue());

        //关闭
        workbook.close();
        fileInputStream.close();

    }

    /**
     * 写入07版本excel
     * @throws Exception
     */
    @Test
    public void testWrite07Excel() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        //工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //工作表
        XSSFSheet sheet = workbook.createSheet("hello world");
        //行--index从0开始
        XSSFRow row = sheet.createRow(2);
        //创建单元格--index从0开始
        XSSFCell cell = row.createCell(2);
        cell.setCellValue("hello world");
        //输出到硬盘
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx");
        //吧excel输入到具体的地址
        workbook.write(fileOutputStream);

        //关闭
        workbook.close();
        fileOutputStream.close();

    }

    /**
     * 读取07版本excel
     * @throws Exception
     */
    @Test
    public void testRead07Excel() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx");
        //读取工作簿
        XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
        //读取第一个工作表
        XSSFSheet sheet = workbook.getSheetAt(0);
        //读取第三行--index从0开始
        XSSFRow row = sheet.getRow(2);
        //读取单元格--index从0开始
        XSSFCell cell = row.getCell(2);
        System.out.println(cell.getStringCellValue());

        //关闭
        workbook.close();
        fileInputStream.close();

    }

    /**
     * 读取07版本excel
     * @throws Exception
     */
    @Test
    public void testRead03And07Excel() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        String fileName = "D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xls";
        if(fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){//判断是否是excel
            boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$");
            FileInputStream fileInputStream = new FileInputStream(fileName);

            //读取工作簿
            Workbook workbook = is03Excel?new HSSFWorkbook(fileInputStream):new XSSFWorkbook(fileInputStream);
            //读取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            //读取第三行--index从0开始
            Row row = sheet.getRow(2);
            //读取单元格--index从0开始
            Cell cell = row.getCell(2);
            System.out.println(cell.getStringCellValue());

            //关闭
            workbook.close();
            fileInputStream.close();
        }
    }

    /**
     * 创建合并单元格
     * @throws Exception
     */
    @Test
    public void testExcelStyle() throws Exception {
        /**
         * 工作簿-工作表-行-单元格
         * 
         */
        //工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        //1.1创建合并单元格对象合并第三行第三列到第五列
        CellRangeAddress cellRangeAddress = new CellRangeAddress(2,2,2,4);//firstRow, lastRow, firstCol, lastCol
        //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.DIAMONDS);//填充模式
        //style.setFillBackgroundColor(HSSFColor.YELLOW.index);//背景色

        //2、工作表
        HSSFSheet sheet = workbook.createSheet("hello world");

        //2.1加载合并单单元格对象
        sheet.addMergedRegion(cellRangeAddress);


        //3.行--index从0开始
        HSSFRow row = sheet.createRow(2);
        //4.创建单元格--index从0开始
        HSSFCell cell = row.createCell(2);
        cell.setCellStyle(style);
        cell.setCellValue("hello world");
        //输出到硬盘
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test2.xls");
        //吧excel输入到具体的地址
        workbook.write(fileOutputStream);

        //关闭
        workbook.close();
        fileOutputStream.close();

    }
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DYanchao2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值