1. apache poi包里有4个主要的类:

Workbook----工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取,
Sheet----------表格,Workbook实例的getSheetAt(int num)方法获取,
Row------------行,Sheet实例的getRow(int num)方法获取,
Cell-------------单元格,Row实例的getCell(int num)方法获取,
最后通过Cell实例根据数据类型调用对应的方法获取单元格的值。

2. 代码

package com.wangtiansoft.stla.common.utils;//import com.upi.institution.common.utils.CommonUtils;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;public class ExcelUtil {private static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);private static Workbook workbook;private static Sheet sheet;/*** 初始化表格,判断文件格式是xls还是xlsx* @param excelPath*/private static void initExcel(String excelPath){if (StringUtils.isEmpty(excelPath)){logger.info("文件路径不能为空");workbook = null;return;}try {InputStream is = new FileInputStream(excelPath);if (excelPath.endsWith(".xls")){//.xls格式workbook = new HSSFWorkbook(is);}else if(excelPath.endsWith(".xlsx")){//.xlsx格式workbook = new XSSFWorkbook(is);}else{workbook = null;logger.info("无法转换的Excel文件格式(后缀名应为:.xls或.xlsx)");}} catch (FileNotFoundException e) {logger.info("找不到指定文件");} catch (IOException e) {logger.info("IO异常");}}/*** 读取Excel文件并解析成json字符串后写入新的文件* @param excelPath 要解析的Excel文件路径(具体文件)* @param fromRow 指定开始读取的行数,如从第2行开始则为2* @param filePath 写入json后的文件保存位置(文件路径)*/private static void readExcelToJsonFile(String excelPath, int headerNum, int fromRow, String filePath){initExcel(excelPath);if(workbook == null){logger.info("初始化工作簿失败");return;}for(int s=0; s<workbook.getNumberOfSheets(); s++){//遍历sheetsheet = workbook.getSheetAt(s);Row headerRow = getRow(sheet, headerNum);//首行,即json-keyint rowNum = sheet.getLastRowNum() + 1;//总行数for(int i=(fromRow-1); i<rowNum; i++){//遍历行,从fromRow行开始遍历Map<String, String > map = new HashMap<String, String>();Row row = sheet.getRow(i);if(row == null){continue;}int cellNum = row.getLastCellNum();//总列数for(int j=0; j<cellNum; j++){//遍历单元格String key = getCellValue(headerRow.getCell(j));String value = getCellValue(row.getCell(j));if(!StringUtils.isEmpty(key) && !StringUtils.isEmpty(value)){map.put(key, value);}}JSONObject jsonObject = JSONObject.fromObject(map);String jsonStr = jsonObject.toString();//将map解析成json字符串String fileName = UUID.randomUUID().toString().replaceAll("-","");fileName = fileName.substring(3);fileName = "002" + fileName;//生成随机文件名,以"002"开头String finalFilePath = filePath + "\\" + fileName + ".txt";//最终保存的文件路径saveAsFileWriter(finalFilePath, jsonStr, false);//将json字符串写入文件,不追加,每一行数据即生成一个文件String fileNamePath = filePath + "\\fileNames.txt";//保存所有随机文件名saveAsFileWriter(fileNamePath, (fileName + "\r\n"), true);//将文件名写入fileNames.txt文本中}logger.info("成功读取Excel并生成文件");}}private static void saveAsFileWriter(String finalFilePath, String content, boolean flag) {FileWriter fwriter = null;try {// true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好fwriter = new FileWriter(finalFilePath, flag);fwriter.write(content);} catch (IOException ex) {ex.printStackTrace();} finally {try {fwriter.flush();fwriter.close();} catch (IOException ex) {ex.printStackTrace();}}}/*** 获取指定行* @param sheet* @param rowNum* @return*/private static Row getRow(Sheet sheet, int rowNum){if(sheet == null){return null;}return sheet.getRow(rowNum - 1);}/*** 获取单元格的值* @param cell* @return 单元格值*/private static String getCellValue(Cell cell){String cellValue = "";if(cell != null){switch (cell.getCellType()){//单元格类型case Cell.CELL_TYPE_BOOLEAN://布尔类型cellValue = cell.getBooleanCellValue() + "";break;case Cell.CELL_TYPE_NUMERIC://数字类型if (HSSFDateUtil.isCellDateFormatted(cell)) {//格式化后的日期数值类型cellValue = new DataFormatter().formatCellValue(cell);} else {//数值double value = cell.getNumericCellValue();int intValue = (int) value;cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);}break;case Cell.CELL_TYPE_FORMULA:{//公式try{cellValue = cell.getNumericCellValue() + "";}catch(IllegalStateException e){cellValue = String.valueOf(cell.getRichStringCellValue());}}break;case Cell.CELL_TYPE_STRING://字符串cellValue = cell.getStringCellValue();break;case Cell.CELL_TYPE_BLANK://空值cellValue = "";break;case Cell.CELL_TYPE_ERROR://故障cellValue = "非法字符";break;default:cellValue = "未知类型";break;}}return cellValue.trim();}public static void main(String[] args) {String test = "C:\\Users\\EDZ\\Desktop\\test.xls";String filePath = "C:\\Users\\EDZ\\Desktop";readExcelToJsonFile(test, 1, 2, filePath);}}

3. 测试


Java读取Excel文件数据并将记录写入到新的文件中--POI技术实现相关推荐

  1. java读取excel表格数据

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

  2. java读取excel数据的方法是_java怎么读取excel文件里的数据

    展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...

  3. 项目实战 Java读取Excel数据

    项目实战 Java读取Excel数据 前言 实现步骤 导入POI依赖 示例Excel表结构 编写读取Excel工具类 实现思路 读取Excel数据工具类实现代码 取出从excel中获取的数据,并插入到 ...

  4. java读取excel数据_Java读取Excel内容(转)

    借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...

  5. Java读取Excel数据:基于Apache POI(一)

    Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Excel表格数据.第三方的Apache提供了一个库POI用以支持Java读写Excel表格数据. 首先需要 ...

  6. JAVA读取Excel数据

    JAVA读取Excel数据 下载 jxl.jar 导入jxl.jar 读取程序 写入Excel 写入txt 下载 jxl.jar 找到一个博主发的,下载好后去掉.zip后缀 jxl.jar下载 - 天 ...

  7. linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据

    Qt 读取Excel表格数据 生成Excel表格并写入数据 Qt 读取Excel表格数据 生成Excel表格并写入数据 修改.pro文件,增加 axcontainer QT += axcontaine ...

  8. Java读取excel指定行列的数据(通过jxl的方式)

    目录 Java读取Excel指定列的数据详细教程和注意事项(通过jxl的方式) 1.前言 2.注意事项 3.主要的API说明 4.示例代码 Java读取Excel指定列的数据详细教程和注意事项(通过j ...

  9. java读取excel的maven_JAVA如何读取Excel数据

    1.创建Maven项目在pom文件中添加依赖 org.apache.poi poi-ooxml 3.17 2.编写代码 import org.apache.poi.ss.usermodel.*; im ...

最新文章

  1. python版本控制神器Virtualenvwrapper的使用
  2. 首款移动社交购物平台“商宝”上线发布
  3. 论文中常用的几个Word2010技巧
  4. c++整理--虚函数
  5. iOS开发 - 抛出异常
  6. [原创]css设置禁止中文换行
  7. 【原创】利用typeface实现不同字体的调用显示及String转换为Unicode
  8. sqlserver与mysql的一些不同的T-SQL语句
  9. LVS详解(三)——LVS算法简介
  10. IIS安全设置终极技巧
  11. 微信小游戏appid申请过程
  12. selenium设置浏览器的大小和位置
  13. 语义解析Parser用户手册
  14. List(updated 2023.01.29)
  15. Unity制作多选题
  16. 创建镜像问题出现的错误
  17. 错过这次,再等一年!视频云CDN全线折扣Hi购启动...
  18. 魔兽服务器负载显示新,魔兽世界部分服务器的负载过高 官方将会开启免费转服服务...
  19. EduCoder-程序设计技术R(第四部分循环结构程序设计2)- 第5关:C循环-寻找完数
  20. vue中如何实现实现中英文切换

热门文章

  1. No package ‘orocos-bfl‘ found
  2. 竞品分析:抖音搜索VS快手搜索
  3. 诚之和:马斯克让保险行业“很分裂”
  4. 进程控制(2):进程操作
  5. pg库删除数据释放表空间
  6. wx.getLocation接口申请失败 失败原因总结 解决思路 解决方案 案例
  7. mysql电量_BBU电池电量的监控
  8. 【蚁剑工具-01】网站管理工具之中国蚁剑安装过程详解以及应用实例
  9. #华为mate8公开版解bl锁避免踩雷的事项
  10. 分布式发电对配电网的影响 研究分布式电源对配电网网损的影响