poi导入导出数据

本文介绍了Java使用POI库进行Excel数据的导入导出操作,包括POI的作用特性,如方便数据库与Excel之间的数据交互。详细讲解了不同版本Excel的区别,如行数限制和后缀名,并提供了设置单元格合并、行高、列宽及样式的代码示例。

1:介绍

poi全称apache poi ,使用java编写的免费开源的跨平台的java api,是创建和维护操作各种符合,用它可以使用java读取和创建修改excel文件,还可以使用java读取和创建word和power point文件

    主要的使用poi操作excel,其他一般很少用!!!

2:作用特性:

excel :

excel是早期的 编程语言-开发游戏-由于放在 excel文件中不够安全,所以被java等语言代替 后期通常被工作人员使用,当成数据库的 简单使用(4s店,税务局,房地产,商场) 记录数据,便于计算、查找、分析、处理 数据。

poi作用特性:

操作三大办公软件,但一般都是操作 excel,主要针对数据库的导入导出操作(导出就是把数据库的数据导出到excel,相反导入就是把excel的数据导入到数据库中)

3:03和07得区别

  	03          	07          

用户体验 老版本 功能比较多
数据量 65536 1048576
后缀名 .xls .xlsx
创建对象 HSSFWorkbook XSSFWorkbook

4:测试

4.1pom

<!--poi-->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.17</version>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.17</version>
</dependency>

4.2:样式设置

4.2.1:设置单元格合并

使用HSSFSheet的addMergedRegion()方法

public int addMergedRegion(CellRangeAddress region)

参数CellRangeAddress 表示合并的区域,构造方法如下:

CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)

构造参数依次表示起始行,截至行,起始列, 截至列

4.2.2:设置单元格的行高、列宽

sheet.setDefaultRowHeightInPoints(10);//设置缺省列高

sheet.setDefaultColumnWidth(20);//设置缺省列宽

//设置指定列的列宽,256 * 16这种写法是因为width参数单位是单个字符的256分之一

sheet.setColumnWidth(cell.getColumnIndex(), 256 * 16);

4.2.3:单元格样式

IndexedColors:颜色

4.3导出数据

@Test
public void test1() throws IOException {
    //创建工作薄
    HSSFWorkbook wb = new HSSFWorkbook();
    //创建sheet对象(设置sheet名)
    HSSFSheet sheet = wb.createSheet("成绩表");
    //创建行   0代表第一行
    HSSFRow row = sheet.createRow(0);
    //在行对象中创建单元格  0代表第一列
    HSSFCell cell = row.createCell(0);
    //设置单元格的内容
    cell.setCellValue("学生考试成绩一览表");
    //合并单元格
    sheet.addMergedRegion(
            //设置合并的位置(起始行,截止行,起始列,截止列)
            new CellRangeAddress(0,0,0,3));
    //同上创建第二行
    HSSFRow row1 = sheet.createRow(1);
    //在第二行中添加值
    row1.createCell(0).setCellValue("姓名");
    row1.createCell(1).setCellValue("班级");
    row1.createCell(2).setCellValue("笔试成绩");
    row1.createCell(3).setCellValue("机试成绩");
    //创建第三行
    HSSFRow row2 = sheet.createRow(2);
    //给中单元格第三行赋值
    row2.createCell(0).setCellValue("张三");
    row2.createCell(1).setCellValue("1807");
    row2.createCell(2).setCellValue("60");
    row2.createCell(3).setCellValue("60");

    //创建输出流
    FileOutputStream outputStream = new FileOutputStream("D:\\测试.xls");
    //调用工作簿的 write方法将内容写出
    wb.write(outputStream);
    //关流
    outputStream.close();
}

4.4导入数据

/**
 * 设置导入
 */
@Test
public void test2() throws IOException {
    //创建输入流读取文件
    FileInputStream fileIn = new FileInputStream("D:\\测试.xls");
    Workbook wb = new HSSFWorkbook(fileIn);
    //获取第一个表单
    Sheet sheet = wb.getSheetAt(0);
    //获取最后一行的行号
    int lastRowNum = sheet.getLastRowNum();
    //获取总行数
    int rows = sheet.getPhysicalNumberOfRows();

    List<PoiTestVo> lists = new ArrayList<PoiTestVo>();

    for(int i = 2;i < sheet.getPhysicalNumberOfRows();i++){
        Row row = sheet.getRow(i);
        int cells = row.getPhysicalNumberOfCells();
        System.out.println(cells);
        if(cells != 1){
            PoiTestVo poiTestVo = new PoiTestVo();
            poiTestVo.setName(row.getCell(0).getStringCellValue());
            poiTestVo.setClassName(row.getCell(1).getStringCellValue());
            poiTestVo.setBscj(Integer.parseInt(row.getCell(2).getStringCellValue()));
            poiTestVo.setJscj(Integer.parseInt(row.getCell(3).getStringCellValue()));
            lists.add(poiTestVo);
        }
    }
    System.out.println(lists);
    fileIn.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值