首先获取FileOutputStream,定义HSSFWorkbook,即一个excel表格
FileOutputStream out = new FileOutputStream(filepath);
HSSFWorkbook workbook = PoiUtils.getWorkBookInstance();
通过HSSFWorkbook生成HSSFSheet,即一个excel表格中的子表
HSSFSheet sheet = PoiUtils.getSheet(workbook, "学生成绩统计");
往sheet中注入数据
PoiUtils.buildLine(sheet, 0, 3, new String[]{"id", "name", "passwd"});
......
/**
* 构造excel行
* 传入的值为Object数组,因此可以传递任意的数组
* 在内部转为String输出
* @param hssfSheet excel的sheet
* @param rowNum 行数,建议第一行为标题,第二行开始是值
* @param cellSize 列数目,即每一行表格数目
* @param params 参数列表,将所有的值转换为String后统一写入
* @return HSSFRow
*/
public static HSSFRow buildLine(HSSFSheet hssfSheet, int rowNum, int cellSize, Object[] params) {
HSSFRow row = hssfSheet.createRow(rowNum);
//创建行单元格
for (int i = 0; i < cellSize; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(String.valueOf(params[i]));
}
System.out.println("successfully insert");
return row;
}
往HSSFWorkbook写入FileOutStream对象
workbook.write(out);
关闭输出流
out.close();
创建文件输入流
FileInputStream in = new FileInputStream(filename);
创建excel文档,通过HSSFWorkbook写入文件输入流
HSSFWorkbook workbook = new HSSFWorkbook(in);
创建excel文档的sheet
HSSFSheet sheet = workbook.getSheet("学生成绩统计");
获取行数,列数
//获取总行数 int rowNum = sheet.getLastRowNum(); int colNum = row.getPhysicalNumberOfCells(); //列数
从第二行开始循环写入excel的值,通过getStringCellValue()
//正文内容第二行开始
for (int i = 1; i < rowNum; i++) {
//获取行
row = sheet.getRow(i);
//每个单元格内容使用-分隔或者放到bean里
//System.out.println(row.getCell(j));
String name = null;
String passwd = null;
for (int j = 0; j < colNum; j++) {
System.out.println(row.getCell(j));
Cell nameCell = row.getCell(1);
Cell passwdCell = row.getCell(2);
name = nameCell.getStringCellValue();
passwd = passwdCell.getStringCellValue();
}
//插入数据库,此处为数据库dao逻辑
saveIntoDB(name, passwd);
}
本文主要讲解了Poi对excel的基本读写。
我的理解是Poi从面向对象的角度出发,从外向内定义了excel表格->表格sheet->sheet行->行中列元素,
按照这个顺序进行数据的导入;
读取excel表格时候对存在的excel表格进行打开,得到其中的sheet,然后解析行列。在每一行中对数据进行操作即可。