利用POI读取excel
来源:互联网 发布:乐乎硬盘 编辑:程序博客网 时间:2024/06/05 18:26
1、poi简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2、maven依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version></dependency>
3、ExcelReaderUtil.java
public class ExcelReaderUtil { // 默认单元格内容为数字时格式 private static DecimalFormat df = new DecimalFormat("0"); // 默认单元格格式化日期字符串 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static class ExcelRow { //所在行标,从1开始 private int row; //该行数据 private List<Object> datas = new ArrayList<>(); public int getRow() { return row; } public void setRow(int row) { this.row = row; } public List<Object> getDatas() { return datas; } public void setDatas(List<Object> datas) { this.datas = datas; } @Override public String toString() { return "[" + datas + "]"; } } /** * 读取Excel文件,支持2007和2003两种版本 * 去掉空行,空单元格对应"",浮点数原样输出 * @param inputStream 输入流 * @param containTitle 是否包含表头 * @return * @throws IOException * List<List<Object>> */ @SuppressWarnings("deprecation") public static List<ExcelRow> readExcel(InputStream inputStream, boolean isExcel2007, boolean containTitle) throws IOException { List<ExcelRow> rowList = new ArrayList<>(); try { //初始化Workbook对象 Workbook wb = null; if (isExcel2007) { wb = new XSSFWorkbook(inputStream); } else { wb = new HSSFWorkbook(inputStream); } //读取标题行,获取列数 Sheet sheet = wb.getSheetAt(0); //第一列开始的行标 int firstRowNum = sheet.getFirstRowNum(); int lastRowNum = sheet.getLastRowNum(); Row row = sheet.getRow(firstRowNum); //表头列数 int firstCellNum = row.getFirstCellNum(); int lastCellNum = row.getLastCellNum(); //遍历数据表,i是游标,要将有数据的读完,中间没数据的行也加入 int i = firstRowNum; if (!containTitle) { i = firstRowNum +1; } for (; i < lastRowNum + 1 ; i++) { row = sheet.getRow(i); //一行数据 List<Object> colList = new ArrayList<Object>(); if (row == null) { continue; } boolean allBlank = true; for (int j = firstCellNum; j < lastCellNum ; j++) { Cell cell = row.getCell(j); Object value = ""; if (cell == null) { colList.add(value); continue; } switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { double num = cell.getNumericCellValue(); if(isInteger(num)) { value = df.format(cell.getNumericCellValue()); } else { value = num; } } else { value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); } break; case XSSFCell.CELL_TYPE_BOOLEAN: value = Boolean.valueOf(cell.getBooleanCellValue()); break; case XSSFCell.CELL_TYPE_BLANK: value = ""; break; default: value = cell.toString(); }// end switch if(StringUtils.isNotBlank(value.toString())){ allBlank = false; } colList.add(value); } // end for j if (!allBlank) { ExcelRow excelRow = new ExcelRow(); excelRow.setRow(i+1); excelRow.setDatas(colList); rowList.add(excelRow); } } // end for i wb.close(); } catch (OfficeXmlFileException e){ throw new IOException("文件后缀与实际文件类型不符", e); } return rowList; } //判断整数(int) private static boolean isInteger(double value) { if(value % 1 == 0){// 是这个整数,小数点后面是0 return true; }else{//不是整数,小数点后面不是0 return false; } }}
4、调用
boolean isExcel2007 = false;if (StringUtils.endsWithIgnoreCase(fileName, ".xlsx")) { isExcel2007 = true;}List<ExcelRow> datas = ExcelReaderUtil.readExcel(file.getInputStream(), isExcel2007, true);String col1 = (String) datas.get(i).getDatas().get(0);
阅读全文
0 0
- 利用POI读取excel
- 利用poi读取excel
- java利用poi读取excel
- java利用poi读取excel
- java利用poi读取excel
- 利用POI读取Excel文件
- JAVA利用Apache Poi读取Excel文件
- java利用poi读取excel中数据
- Java利用POI读取Excel表格
- 利用Java 创建和读取Excel文档(POI方法)
- 利用apache poi读取excel的一个小例子
- 利用POI将读取的数据写入Excel
- 利用poi对excel进行读取操作实例
- 利用POI插件导入excel怎样读取合并行数据?
- java 读取Excel (利用poi,jxl插件)
- 利用poi.jar对excel进行读取、修改和删除
- POI-----POI读取Excel实例
- POI读取EXCEL
- android 错误Error:Execution failed for task ':app:lintVitalRelease'.>
- C#结构体
- Oracle—查询所有用户信息
- 算法谜题63 加减归零
- 清除浮动
- 利用POI读取excel
- (转)那些年不容错过的硅谷IT公司
- 队列
- 算法谜题34 星星的硬币
- linux 零拷贝
- 【转载】【php】获取两个指定字符串之间的值
- Web漏洞之X-Frame-Options未设置
- maven deploy tomcat8(tomcat7)
- 微信WeUI设计规范文件下载及使用方法