纳税服务系统【用户模块之使用POI导入excel、导出excel】

前言

再次回到我们的用户模块上,我们发现还有两个功能没有完成:

这里写图片描述

对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的。但是呢,在Java中操作excel是相对常用的,因此也有组件供我们使用

JAVA中操作Excel的有两种比较主流的工具包

  • JXL
  • POI

这次我们主要学习的是POI操作excel。

JXL有一个缺陷,只能操作03或以前版本的excel,而POI可以操作97-07版本的。

POI基础

面向对象看excel

首先,要用Java来操作excel的话,肯定用对象来指定excel相关的内容的。我们来看看excel由什么组成:

这里写图片描述

POI是这样看的:

  • 整个excel称作为工作薄
  • 工作薄下可以创建很多张表,称作为工作表
  • 工作表有非常多的行
  • 行又可细分单元格【指定行的列就可以定位到工作表任意的位置了】

给我们一顿分析以后,我们发现它们之间是有从属关系的:

  • 工作表从属于工作薄
  • 行从属于工作表
  • 单元格从属于行

这里写图片描述

这里写图片描述


操作Excel步骤

导入POI开发包:

  • 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【dom4j一般在项目导入的时候已经存在了】。
  • poi-ooxml-3.11-20141221.jar

/**
 * 使用POI1无非操作Excel无非就4个步骤:
 *
 * 创建/读取工作薄
 * 创建/读取工作表
 * 创建/读取行
 * 创建/读取单元格
 *
 *
 * */

创建Excel并写入数据


    @Test
    public void testWrite() throws IOException {

        //创建工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();

        //创建工作表
        HSSFSheet sheet = workbook.createSheet("我是新的工作表");

        //创建行,坐标从0开始,我创建的是第三行
        HSSFRow row = sheet.createRow(2);

        //创建单元格,坐标也是从0开始,于是就是第三行第三列
        HSSFCell cell = row.createCell(2);

        //往单元格写数据
        cell.setCellValue("helloWorld");

        //把工作薄写到硬盘中
        FileOutputStream outputStream = new FileOutputStream("C:\\工作薄.xls");
        workbook.write(outputStream);

        //关闭流
        workbook.close();
        outputStream.close();

    }

这里写图片描述

这里写图片描述


读取Excel的数据


    @Test
    public void testRead() throws IOException {

        //获取输入流,读取Excel数据
        FileInputStream inputStream = new FileInputStream("C:\\工作薄.xls");

        //创建工作薄
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);

        //得到工作表
        HSSFSheet sheet = workbook.getSheetAt(0);

        //得到行
        HSSFRow row = sheet.getRow(2);

        //得到单元格
        HSSFCell cell = row.getCell(2);

        //得到单元格的数据
        String cellValue = cell.getStringCellValue();

        System.out.println(cellValue);

    }

这里写图片描述

这里写图片描述


03与07版本

  • 03版本使用的是HSSFWorkbook这么一个类来操作03的Excel数据
  • 07版本使用的是XSSFWorkbook这么一个类来操作07的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);
            
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值