Java使用POI读取和写入Excel指南 |
您所在的位置:网站首页 › realmegtneo双系统 › Java使用POI读取和写入Excel指南 |
做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求; 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作1.1 在项目中引入Apache POI相关类库引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: org.apache.poi poi 4.0.1 org.apache.poi poi-ooxml 4.0.1 2. 读取或写入Excel数据2.1 示例程序结构说明简单说明一下示例程序的整体结构: ExcelReader.java是实现读取Excel数据功能的类; ExcelWriter.java是创建新的Excel并向其中写入数据的类; ExcelDataVO.java封装了读取或写入时每一“行”的数据; MainTest.java是示例程序的入口类,其中演示了读取和写入Excel数据的整个过程; 2.2 读取数据示例程序需要从桌面读取 readExample.xlsx 内的数据,readExample.xlsx 的内容如下: 读取Excel时主要调用ExcelReader.java类来读取和解析Excel的具体内容,这里以读取系统文件的形式演示读取过程:(兼容 xls 和 xlsx) 2.2.1 主程序入口类代码:/** * Author: Dreamer-1 * Date: 2019-03-01 * Time: 10:13 * Description: 示例程序入口类 */public class MainTest { public static void main(String[] args) { // 设定Excel文件所在路径 String excelFileName = "/Users/Dreamer-1/Desktop/myBlog/java解析Excel/readExample.xlsx"; // 读取Excel文件内容 List readResult = ExcelReader.readExcel(excelFileName); // todo 进行业务操作 } }读取和写入时封装每一“行”数据的ExcelDataVO.java代码如下: /** * Author: Dreamer-1 * Date: 2019-03-01 * Time: 11:33 * Description: 读取Excel时,封装读取的每一行的数据 */public class ExcelDataVO { /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; /** * 居住地 */ private String location; /** * 职业 */ private String job; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } }2.2.2 Excel解析类的代码:/** * Author: Dreamer-1 * Date: 2019-03-01 * Time: 10:21 * Description: 读取Excel内容 */public class ExcelReader { private static Logger logger = Logger.getLogger(ExcelReader.class.getName()); // 日志打印类 private static final String XLS = "xls"; private static final String XLSX = "xlsx"; /** * 根据文件后缀名类型获取对应的工作簿对象 * @param inputStream 读取文件的输入流 * @param fileType 文件后缀名类型(xls或xlsx) * @return 包含文件数据的工作簿对象 * @throws IOException */ public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException { Workbook workbook = null; if (fileType.equalsIgnoreCase(XLS)) { workbook = new HSSFWorkbook(inputStream); } else if (fileType.equalsIgnoreCase(XLSX)) { workbook = new XSSFWorkbook(inputStream); } return workbook; } /** * 读取Excel文件内容 * @param fileName 要读取的Excel文件所在路径 * @return 读取结果列表,读取失败时返回null */ public static List readExcel(String fileName) { Workbook workbook = null; FileInputStream inputStream = null; try { // 获取Excel后缀名 String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); // 获取Excel文件 File excelFile = new File(fileName); if (!excelFile.exists()) { logger.warning("指定的Excel文件不存在!"); return null; } // 获取Excel工作簿 inputStream = new FileInputStream(excelFile); workbook = getWorkbook(inputStream, fileType); // 读取excel中的数据 List resultDataList = parseExcel(workbook); return resultDataList; } catch (Exception e) { logger.warning("解析Excel失败,文件名:" + fileName + " 错误信息:" + e.getMessage()); return null; } finally { try { if (null != workbook) { workbook.close(); } if (null != inputStream) { inputStream.close(); } } catch (Exception e) { logger.warning("关闭数据流出错!错误信息:" + e.getMessage()); return null; } } } /** * 解析Excel数据 * @param workbook Excel工作簿对象 * @return 解析结果 */ private static List parseExcel(Workbook workbook) { List resultDataList = new ArrayList(); // 解析sheet for (int sheetNum = 0; sheetNum |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |