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