Java对Excel数据处理(利用POI解析Excel)
前言
研究生复试结束我在学校官网上看到了全校按姓氏排列的拟录取名单,但是官网并没有给出每个人的专业,只有学号,另外还知道本专业的复试名单,所以我想知道对于本专业的拟录取名单。具体做法就是,扫描复试名单每一条信息去总的拟录取名单挑出存在的信息。这就涉及到了office文件的读写,Microsoft Office格式文档的处理,Java提供了比较完整的开源项目——POI,它是Apache软件基金会的开源项目。POI提供API给Java程序对Microsoft Office格式档案读和写的功能。下面实现了对于Excel的读写,关于更多POI的用法,请参考官方API文档:https://poi.apache.org/apidocs/4.1/。
关于POI
POI提供了一堆处理Office文件的工具,大致分类如下
- HSSF - 提供读写Microsoft Excel格式档案的功能。
- XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
- HWPF - 提供读写Microsoft Word格式档案的功能。
- HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
- HDGF - 提供读写Microsoft Visio格式档案的功能。
这里我们主要用到HSSF,关于其他的文件处理,请参考上述官方API文档,同时,使用时必须引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
非maven项目可以点击这里下载https://www.kumapai.com/open/1658-poi/3-17 jar包。
- HSSF提供的对于Excel的文档结构类:
- HSSFWorkbook excel文档对象
- HSSFSheet excel的sheet
- HSSFRow excel的行
- HSSFCell excel的单元格
- HSSFFont excel字体
- HSSFName 名称
- HSSFDataFormat 日期格式
- HSSFHeader sheet头
- HSSFFooter sheet尾
- HSSFCellStyle cell样式
- HSSFDateUtil 日期
- HSSFPrintSetup 打印
- HSSFErrorConstants 错误信息表
代码
返回值使用二维list存储一个sheet,下面是读取一个excel文件
public static List<List<String>> readExcle(String fileName) throws Exception {
//new一个输入流
FileInputStream inputStream = new FileInputStream(fileName);
//new一个workbook
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
//创建一个sheet对象,参数为sheet的索引
HSSFSheet sheet = workbook.getSheetAt(0);
//new出存放一张表的二维数组
List<List<String>> allData = new ArrayList<List<String>>();
for (Row row:sheet) {
List<String> oneRow = new ArrayList<String>();
//不读表头
if(row.getRowNum()==0)
continue;
for (Cell cell : row) {
cell.setCellType(cell.CELL_TYPE_STRING);
oneRow.add(cell.getStringCellValue().trim());
}
allData.add(oneRow);
}
for (int i = 0; i < allData.size(); i++) {
System.out.println(allData.get(i));
}
//关闭workbook
workbook.close();
return allData;
}
写入Excel文件
public static boolean writeExcel(List<List<String>> result,String[] sheetHead,String fileName){
//创建一个workbook对应一个excel
HSSFWorkbook workbook=new HSSFWorkbook();
//在workbook中创建一个sheet
HSSFSheet sheet = workbook.createSheet();
//在sheet中创建第0行
HSSFRow row=sheet.createRow(0);
//设置表头
for (int i = 0; i < 10; i++) {
row.createCell(i).setCellValue(sheetHead[i]);
}
//填写数据
for (int i = 0; i < result.size(); i++) {
HSSFRow row1 = sheet.createRow(i + 1);
for (int j = 0; j <result.get(i).size() ; j++) {
row1.createCell(j).setCellValue(result.get(i).get(j));
}
}
//写入文件
try {
FileOutputStream file=new FileOutputStream(fileName);
workbook.write(file);
workbook.close();
return true;
}catch (IOException e){
e.printStackTrace();
return false;
}
}
Java对Excel数据处理(利用POI解析Excel)的更多相关文章
- java利用poi解析excel文件
首先需要引入以下jar包 如果使用maven,需要添加两个依赖 <dependencies> <dependency> <groupId>org.apache.po ...
- java读写excel文件( POI解析Excel)
package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...
- 利用POI获取Excel中图片和图片位置
利用POI获取Excel中图片和图片位置(支持excel2003or2007多sheet) 转自:http://blog.csdn.net/delongcpp/article/details/8833 ...
- poi解析Excel内容
poi可以将指定目录下的Excel中的内容解析.读取到java程序中.下面是一个Demo: 使用poi需要导下包,如下: 首先是准备读取的Excel表,存放在"E:\programming\ ...
- poi解析Excel文件版本问题
poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xls)的文件 XSSFWorkbook格式用来解析Excel2007(xlsx)的文件 如果用HSSF ...
- poi解析excel出现格式不正确
后缀为xlsx的excel做系统导入时出现bug: Strict OOXML isn't currently supported, please see bug #57699 为了同时兼容03.07及 ...
- POI解析Excel时,如何获取单元格样式以及单元格Style的一些操作
最近,公司运营平台需要上传Excel文件并进行解析导入数据库,在开发完成后出现了一个始料不及的生产bug,下面是具体原因: 1.在用POI解析Excel时,默认如果Excel单元格中没有数据,且单元格 ...
- springmvc 使用poi解析excel并通过hibernate连续插入多条数据 实际数据库只能保存最后一条
有一个原始数据的excel表 用poi解析之后通过hibernate插数据库 结果 后来发现,有人说 果断尝试 问题解决 但是这好像并不是真正解决问题,只是解决了一个现象 因为有人说 https:// ...
- java 使用 poi 解析excel
背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...
随机推荐
- 关于如何在Visual Studio上仿真调试安卓的U3D应用
正巧最近需要开发一个安卓手机上的Unity3D游戏功能,想着既然要开发么,当然需要调试.本来的话一些基础功能是不需要使用仿真模拟器,直接在U3D的开发编辑器上就能调试,不过有一些安卓上才能执行,比如 ...
- C# CreateParams的使用(解决闪屏问题)
<转载自:https://blog.csdn.net/xpwang/article/details/53427479> 窗体和控件的属性CreateParams(这真的是一个属性)很神奇, ...
- hibernate框架搭建
hibernate框架的搭建步骤: 1.导包 2.创建数据库准备表 3.书写orm元数据(对象与表的映射配置文件) 4.书写配置文件 5.书写代码测试 一.导包: 创建web-maven工程添加hib ...
- powerdesigner 不能自动生成注释的解决方法(三步解决)
解决power designer 不能自动生成注释的解决办法只需要3步: 一.快捷键 Ctrl+Shift+X 打开脚本编辑器:(快捷键不能执行的话可以从这个路径执行:Tools --> Exc ...
- Foxmail6.5 ERR LOGIN FAIL 重新输入口令
这几天 Foxmail 6.5 收邮件不正常,一直报告ERR LOGIN FAIL,要求重新输入口令. 但输入正确的口令也无法收邮件. 反复折腾,最后发现如下设置即可: 邮箱账户设置 --> 邮 ...
- java并发面试
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- 深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存
摘要: 主要针对Dao层的一些数据库查询的操作,数据实时性不强,直接加入缓存.当缓存中有的时候,就使用缓存中的数据.这样的方法,最终仅仅使用一个注解实现.对于之前的hibernate二级缓存使用,比较 ...
- [Swift]LeetCode132. 分割回文串 II | Palindrome Partitioning II
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- [Swift]LeetCode407. 接雨水 II | Trapping Rain Water II
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...
- [Swift]LeetCode832. 翻转图像 | Flipping an Image
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...