我们可以使用POI操作Excel文件,本文主要介绍:“导入POI的Maven依赖”、“创建Poi对象”、“Poi读取Excel工作表数目”、“Poi读取Excel名称”、“Poi读取Excel一列数据,放到list集合中”、“读取单元格数据”、“Poi读取Excel一行数据,放到List集合”。

1、导入POI的Maven依赖。

<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>

2、创建Poi对象。

protected Workbook wb;private PoiUtils() {}public PoiUtils(String filePath) throws IOException {InputStream inputStream = new FileInputStream(filePath);if (filePath.endsWith(".xls")) {wb = new HSSFWorkbook(inputStream); // 处理以.xls结尾的excel} else {wb = new XSSFWorkbook(inputStream);// 处理以.xlsx结尾的excel}}

3、Poi读取Excel工作表数目。

/** @return -1 读取文件发生意外 */public int readExcelSheetNO(String file) {try {int sheetNO = wb.getNumberOfSheets();wb.close();return sheetNO;} catch (IOException e) {e.printStackTrace();return -1;}}

4、Poi读取Excel名称。

/** @return 空串,读取文件发生意外 */public String readExcelSheetName(String file, int sheetAtNO) {try {String sheetName = wb.getSheetName(sheetAtNO);wb.close();return sheetName;} catch (IOException e) {e.printStackTrace();return "";}}

5、Poi读取Excel一列数据,放到list集合中。

/** 读取Excel表格一列内容* * @return null,读取文件发生意外 */public List<String> readExcelCell(String file, int sheetAtNO, int cellNO) {List<String> listRow = new ArrayList<String>();// 解析公式结果try {FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();Sheet sheet = wb.getSheetAt(sheetAtNO);listRow = doReadExcelCell(cellNO, evaluator, sheet);wb.close();} catch (IOException e) {e.printStackTrace();return null;}return listRow;}private List<String> doReadExcelCell(int cellNO, FormulaEvaluator evaluator, Sheet sheet) {int maxRow = sheet.getPhysicalNumberOfRows(); // 总行数System.out.println("总行数maxRow:" + maxRow);List<String> listRow = new ArrayList<String>();for (int i = 0; i < maxRow; i++) {Row row = sheet.getRow(i);if(row == null) {return null;}Cell cell = row.getCell((short) cellNO);CellValue cellValue = evaluator.evaluate(cell);if (cellValue == null) {listRow.add(null);continue;}listRow.add(getCellFormatValue(i, cellNO, cellValue));}return listRow;}

6、读取单元格数据。

/** 根据Cell类型设置数据* * @param i* @param rowNO* * @param cellValue* @return */private String getCellFormatValue(int rowNO, int column, CellValue cellValue) {String cellStringValueOf = "";if (cellValue != null) {// 经过公式转换,函数只剩下数值型、布尔型、字符串型// 判断当前Cell的Typeswitch (cellValue.getCellTypeEnum()) {case NUMERIC: // 数值型if (String.valueOf(cellValue.getNumberValue()).contains(".")) {NumberFormat numberFormat = NumberFormat.getInstance();numberFormat.setGroupingUsed(false);cellStringValueOf = numberFormat.format(cellValue.getNumberValue());} else {cellStringValueOf = String.valueOf(cellValue.getNumberValue());}break;case BOOLEAN: // 布尔型cellStringValueOf = String.valueOf(cellValue.getBooleanValue());break;case ERROR: // 错误System.out.println("读取错误" + ",行:" + rowNO + ",列:" + column);break;case BLANK: // 空值break;case FORMULA: // 公式型break;default: // 字符串型cellStringValueOf = cellValue.getStringValue();break;}} else {System.out.println("读取错误");}return cellStringValueOf;}

7、Poi读取Excel一行数据,放到List集合。

/** @param file*            要读取的文件路径* @param sheetAtNO*            读取名称为sheetName的表格* @param rowNO*            读取第n+1行* @return null,读取文件发生意外 */public List<String> readExcelRow(String file, String sheetName, int rowNO) {// 解析公式结果try {FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();Sheet sheet = wb.getSheet(sheetName);List<String> listRow = new ArrayList<String>();listRow = readRow(rowNO, evaluator, sheet);wb.close();return listRow;} catch (IOException e) {e.printStackTrace();return null;}}/** 读取一行数据 */protected List<String> readRow(int rowNO, FormulaEvaluator evaluator, Sheet sheet) {Row titleRow = sheet.getRow(0);// 第一行的条数Row row = sheet.getRow(rowNO);// 首行总列数int titleColNum = titleRow.getPhysicalNumberOfCells();// System.out.println("首行总列数titleColNum:" + titleColNum);// // 这行总列数// int colNum = row.getPhysicalNumberOfCells();// System.out.println("总列数colNum:" + colNum);List<String> listRow = new ArrayList<String>();for (int i = 0; i < titleColNum; i++) {Cell cell = row.getCell((short) i);CellValue cellValue = evaluator.evaluate(cell);if (cellValue == null) {listRow.add(null);continue;}listRow.add(getCellFormatValue(rowNO, i, cellValue));}return listRow;}

Java使用POI操作Excel文件相关推荐

  1. java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件

    工作中临时需要对各种订单量进行简单的统计分析,为了方便简单学习了apache poi 对 xlsx 文件的基本操作,简单记录 1. 引包 org.apache.poi poi-ooxml 4.1.2 ...

  2. Java 使用 POI 对 Excel文件 进行读写操作

    Java 使用 POI 对 Excel文件 进行读写操作 一.背景 目前正在做一个问卷功能模块,收集完问卷信息后,需要将数据库中的数据导出到Excel数据表中进行留存,因此就学习了在Java中如何对E ...

  3. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

  4. Apache POI操作Excel文件

    Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用PO ...

  5. java使用poi生成Excel文件并合并单元格

    java使用poi生成Excel文件并合并单元格        业务需要根据 分管部门 字段进行合并,现在提供一种思路. controller层 @Inject(target = "/inf ...

  6. Java使用poi操作excel注意事项

    Java使用poi操作excel注意事项 1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少 2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬 ...

  7. JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls)

    JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls) *** POI的结构: ---*HSSF - 提供读写Microsoft Excel格式档案的功能. ---*XSSF - ...

  8. java使用poi操作excel删除一整行

    java使用poi操作excel删除一整行 需求1:删除excel表格第4行 代码示例: sheet.shiftRows(4, sheet.getLastRowNum(),-1); 第一个参数为行数( ...

  9. Java 使用 POI 操作 Excel

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

最新文章

  1. 5.3.5 TCP拥塞控制
  2. 我的自白——华夏藏珍第一周
  3. bootstrap3 徽章_【可预留】不倒翁工作室,数码宝贝 勇气徽章
  4. C#高效编程话题集1(每期10话题)
  5. STM32三种启动模式 boot0 boot1
  6. iis7php怎么301重定向,iis7/8设置网站301重定向的方法
  7. C#算法设计排序篇之06-堆排序(附带动画演示程序)
  8. Linux Enterprise Cluster选译
  9. tomcat部署项目启动采坑之UnknownHostException
  10. Atitit 常见每日流程日程日常工作.docx v7 r8f
  11. 推荐5款心仪的电脑软件
  12. systen v消息队列(一)
  13. 网络服务器是硬盘吗,云盘与网络服务器硬盘是什么?它们一样吗?
  14. ## 机械干了一辈子,螺栓上的8.8是什么意思
  15. Java基础12 implement和extends的区别
  16. 淘宝店铺上传成人用品类宝贝的错误解决
  17. 在线matlab,web版,还是挺好用的
  18. Java系列之:查看jar包中源代码
  19. Android studio软件编译生成APK
  20. C罗8000W英镑到底是多少钱?!

热门文章

  1. 双引号和尖括号的区别
  2. 数据倾斜及其解决方式
  3. 【软件测试】金3银4,APP面试题经验分享
  4. 蓝氏兄弟依靠板栗东山再起,意外赚回八九万元
  5. oracle锁概念,阻塞
  6. BAI公布2021年全球创新奖获奖名单
  7. 在图表上快速检验交易理念
  8. rapidjson笔记
  9. 2009 Record Vol.1 两个人天堂|Our Heaven|
  10. 【iOS】KVC 与 KVO