一 :简介
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel

Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。

官方主页: http://poi.apache.org/index.html
API文档: http://poi.apache.org/apidocs/index.html

Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选。

本篇博客简单演示一下apache poi 读取excel数据。
1.添加依赖

     <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>

2.编写一个工具类,可以直接复制

package com.test1;import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import static org.apache.poi.ss.usermodel.Row.MissingCellPolicy.RETURN_BLANK_AS_NULL;
@Slf4j
public class ExcelUtils {
//    private static final Logger log = LoggerFactory.getLogger(ExcelUtils.class);//文件路径private String filePath;//整个excel对象private XSSFWorkbook excelWBook;//sheet工作表对象private XSSFSheet excelWSheet;//行对象private XSSFRow Row;//单元格private XSSFCell Cell;//读文件IOFileInputStream inputStream;public  void openFile(String file){try {//读取文件this.filePath = file;this.inputStream = new FileInputStream(this.filePath);this.excelWBook = new XSSFWorkbook(inputStream);} catch (Exception e) {e.printStackTrace();}}public void closeFile() throws Exception {this.excelWBook.close();this.inputStream.close();}public Object[][] getAllData(String sheetName) throws Exception {//获取工作簿this.excelWSheet = this.excelWBook.getSheet(sheetName);// 总行数int rowCount = this.excelWSheet.getLastRowNum() - this.excelWSheet.getFirstRowNum() + 1;// 总列数int colCount = this.excelWSheet.getRow(0).getPhysicalNumberOfCells();//开始与结束的行号、列号int startRow = 0;int endRow = rowCount - 1;int startCol = 0;int endCol = colCount - 1;//读取List<Object[]> records = new ArrayList<Object[]>();for (int i = startRow; i <= endRow; i++) {String[] row = new String[endCol - startCol + 1];for (int j = startCol; j <= endCol; j++) {row[j] = getCellData(sheetName, i, j);}records.add(row);}//将List转换为二维数组Object[][] results = new Object[records.size()][];for (int i = 0; i < records.size(); i++) {results[i] = records.get(i);}if (!(results.length > 0)) {log.error("数据参数文件读取为空,无法执行测试,请检查");throw new RuntimeException("dataprovider data is empty");}return results;}/***** 读取单元格数据* @param sheetName 工作簿名称* @param RowNum 行号* @param ColNum 列号*/public String getCellData(String sheetName, int RowNum, int ColNum) throws Exception {this.excelWSheet = this.excelWBook.getSheet(sheetName);try {Cell = this.excelWSheet.getRow(RowNum).getCell(ColNum);String CellData = "";if (Cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {//字符串CellData = Cell.getStringCellValue();} else if (Cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {//数字short format = Cell.getCellStyle().getDataFormat();if (HSSFDateUtil.isCellDateFormatted(Cell)) {//日期Date d = Cell.getDateCellValue();DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");CellData = formater.format(d);} else if (format == 14 || format == 31 || format == 57 || format == 58) {// 日期DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");Date date = DateUtil.getJavaDate(Cell.getNumericCellValue());CellData = formater.format(date);} else if (format == 20 || format == 32) {// 时间DateFormat formater = new SimpleDateFormat("HH:mm");Date date = DateUtil.getJavaDate(Cell.getNumericCellValue());CellData = formater.format(date);} else {//小数DecimalFormat df = new DecimalFormat("0");CellData = df.format(Cell.getNumericCellValue());}} else if (Cell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {//空白CellData = "";}else if(Cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN){//布尔CellData = String.valueOf(Cell.getBooleanCellValue());}else {//未知类型throw new RuntimeException("no support data type");}log.info("读取sheet工作表【" + sheetName + "】的第" + RowNum + "行第" + ColNum + "列的值为:" + CellData);//返回字符串return CellData;} catch (Exception e) {log.debug("读取sheet工作表【" + sheetName + "】的第" + RowNum + "行第" + ColNum + "列的值时异常:" + e);throw new RuntimeException("get excel data error-->" + e);}}/*** 写入单元格数据* @param sheetName 工作簿名称* @param RowNum 行号* @param ColNum 列号*/public void setCellData(String sheetName,int RowNum, int ColNum) throws IOException {this.excelWSheet = this.excelWBook.getSheet(sheetName);String resultValue = "this is new";try {// 获取 excel文件中的行对象Row = this.excelWSheet.getRow(RowNum) == null ? excelWSheet.createRow(RowNum) : this.excelWSheet.getRow(RowNum);// 如果单元格为空,则返回 NullCell = Row.getCell(ColNum, RETURN_BLANK_AS_NULL);if (Cell == null) {// 当单元格对象是 null 的时候,则创建单元格// 如果单元格为空,无法直接调用单元格对象的 setCellValue 方法设定单元格的值Cell = Row.createCell(ColNum);// 创建单元格后可以调用单元格对象的 setCellValue 方法设定单元格的值Cell.setCellValue(resultValue);System.out.println("写入成功");} else {// 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法设定单元格的值Cell.setCellValue(resultValue);System.out.println("写入成功");}} catch (Exception e) {throw new RuntimeException("set excel data error-->" + e);}// 实例化写入 excel 文件的文件输出流对象FileOutputStream fileOut = new FileOutputStream(this.filePath);// 将内容写入 excel 文件中this.excelWBook.write(fileOut);// 调用flush 方法强制刷新写入文件fileOut.flush();// 关闭文件输出流对象fileOut.close();}}

3.测试类

public class PoiDome {public static void main(String[] args) throws Exception {String filename = "D:\\workSpace\\talent\\siyangerzan\\dianwei.xlsx";// Object[][] excelData = ExcelDataUtil.getExcelData(filename, sheetname);ExcelUtils excelUtils = new ExcelUtils();excelUtils.openFile(filename);Object[][] excelData = excelUtils.getAllData("自动化数据");for (Object[] row : excelData){Object r1 = row[0];Object r2 = row[1];Object r3 = row[2];Object r4 = row[3];System.out.println(r1.toString()+"--"+r2.toString()+"--"+r3.toString()+"--"+r4.toString());}
//        excelUtils.setCellData("pin",9,1);excelUtils.closeFile();}}

相关文章:Apache POI使用详解_org.apache.poi_风流 少年的博客-CSDN博客

java 实现Excel 表格数据的读写相关推荐

  1. Java实现Excel表格数据的导入(兼容xls与xlsx)

    Java实现Excel表格数据的导入(兼容xls与xlsx) 目录 依赖 代码 注意点 目录 依赖 <!-- 添加POI的依赖用于Excel的操作 --><dependency> ...

  2. java读取excel表格数据

    1 背景介绍 java读取excel文件有很多的应用场景,如读取数据后入库,或者做数据分析,预处理等等,那么如何做到读取文件呢,下面看具体步骤. 笔者使用环境是IDEA2020.1,jdk8. 2 导 ...

  3. java导入Excel表格数据

    一.思路是这样的: 1.先做好一个Excel模板供用户下载,例如下图 2.用户使用模板填好数据,上传Excel文件到web后台,后台接收文件. 3.把用户上传的文件进行校验文件格式.字段是否符合要求, ...

  4. excel 单元格如何获取textbox中的值 java,把excel表格数据定义为文本框-excel中如何将单元格里的数值显示在文本框(textbox)里...

    excel中如何将单元格里的数值显示在文本框(textbox)里 sheets("Sheet2").range("b3")=textbox ---------- ...

  5. Java中Excel表格数据的导入和导出步骤和方法

    Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表.读取Excel数据表的第一步是创建Workbook(术 语:工作薄),下面的代码片段举例说 ...

  6. Java生成Excel表格数据的两种方式(Easy Excel和SXSSFWorkbook)以及测试方法

    一. 使用alibaba中的Easy Excel工具 在gradle文件中引入依赖 dependencies {implementation 'com.alibaba:easyexcel:3.2.0' ...

  7. JAVA处理Excel表格数据并写入数据库

    Excel提供了把SQLServer作为数据源导入数据的技术,但似乎没有提供方法把Excel中的数据导入到数据库.Apache的POI提供了Java程序对Microsoft Office格式档案读和写 ...

  8. Java中Excel表格数据的导入与导出

    该指南的发布为当前svn主干提供了功能.那些在以前版本中查找信息的人应该查看发布的文档. HSSF允许从XLS文件中写入或读取数字.字符串.日期或公式单元格值.在这个版本中,还包括行和列的大小.单元样 ...

  9. java读写excel表格数据

    java读写excel表格数据 java读写excel表格数据 excel类 package excel;import java.io.File; import jxl.Cell; import jx ...

最新文章

  1. 5G手机“狂奔而来”,业内预计明年二季度全面上市
  2. c语言 结构体映射,内存管理之4:页面映射中的结构体
  3. socket函数介绍
  4. python长连接框架_python之websocket【长连接的实现】
  5. ExtJs UI框架学习三
  6. postgresql 目录结构
  7. JS基础_break和continue
  8. jquery zTree异步搜索的例子--搜全部节点
  9. php 自定义 引用函数,php总结6——自定义函数、引用传值
  10. 办公小技巧,OmniGraffle绘制流程图方法分享
  11. js ajax上传file文件上传,使用ajaxfileupload.js实现上传文件功能
  12. Apache Ant简介
  13. php yi ju hua,汉音对照 这句话应该如何翻译? zhe ju hua ying gai ru he fan yi ? - 王朝网络 - wangchao.net.cn...
  14. 【动手深度学习-笔记】注意力机制(一)注意力机制框架
  15. Windows系统下的部分dos命令
  16. DNS信息查询综合实验
  17. 【图像增强】基于萤火虫算法实现图像对比度增强附matlab代码
  18. 关于Win10版本1903的蓝牙设备已配对但无法使用的结局方案
  19. 【c#系列】PDF进行操作-浏览、分割、合并、插入、删除(4)完
  20. IOS---如何获取当前的日期和时间(阴历阳历),并显示带阴历阳历24节气的日历

热门文章

  1. 机房重构中的权限问题
  2. 发电机惯例和电动机惯例
  3. 全球最大的搜索引擎 Google 推出的站长赚钱计划,看了就知道!
  4. 分析QQ网页密码加密的方法,开发QQ外挂开心农场外挂
  5. 评测三款最流行的epub阅读器(windows适用)
  6. [SpringCloud] 入门-第四篇: 熔断机制 hystrix
  7. GitHub 疑遭中间人攻击,无法访问;最大暗网托管商再次被黑,数据库被删​
  8. 零基础Python入门学习,阅读完这篇文章就够了
  9. 大牛程序员是如何入行的?(附带Web开发者入行指南)
  10. ps提示:字体在系统上 但需要更改版面