linux系统处理excel,Apache POI处理Excel文档
目前比较流行处理excel文档的方式一般有两种,分别是POI和JXL。重量级POI优缺点:适合对excel文档细节有比较专业的要求,如使用公式、宏等高级功能;缺点是操作相对繁琐,非纯java编写的架包,跨平台性有待加强。轻量级JXL优缺点:Jxl是纯javaAPI,跨平台性优越,操作相对简便;缺点是对excel文档的一些高级功能不支持,但可以满足日常需求。这里我们介绍POI的基本使用。
1.首先导入相关架包,如图:
这里还要注意你开发项目的JDK版本是什么,要根据相应JDK版本下载不同POI的版本。
如图:
2.操作ExcelReader辅助类可以处理xls和xlsx文件,readExcelTitle(InputStream is)方法读取文件标题,也就是文件首行,readExcelContent(InputStream is)方法读取文件内容:
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
/**
* 操作Excel表格的功能类
*/
public class ExcelReader {
private static DecimalFormat df = new DecimalFormat("0");
private final static Logger log = Logger.getLogger(ExcelReader.class);
private Workbook wb=null;
private Sheet sheet=null;
private Row row=null;
/**
* 读取Excel表格表头的内容
* @param InputStream
* @return String 表头内容的数组
* @throws IOException
*/
public String[] readExcelTitle(InputStream is) throws Exception {
try {
wb = WorkbookFactory.create(is);
} catch (IOException e) {
log.error("读取Excel表格表头的内容异常", e);
throw e;
}
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// 标题总列数
int colNum = row.getPhysicalNumberOfCells();
String[] title = new String[colNum];
for (int i = 0; i < colNum; i++) {
title[i] = getCellFormatValue(row.getCell(i));
}
log.info("读取Excel表格表头的内容完毕");
return title;
}
/**
* 读取Excel数据内容
* @param InputStream
* @return Map 包含单元格数据内容的Map对象
* @throws IOException
*/
public Map readExcelContent(InputStream is) throws Exception {
Map content = new LinkedHashMap();
String str = "";
try {
wb = WorkbookFactory.create(is);
} catch (IOException e) {
log.error("读取Excel数据内容", e);
throw e;
}
sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
while (j < colNum) {
// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
if (row != null) {
str += getCellFormatValue(row.getCell(j)).trim() + ",";
} else {
str += "" + ",";
}
j++;
}
content.put(i, str.substring(0, str.length() - 1));
str = "";
}
log.info("读取Excel数据内容完毕");
return content;
}
/**
* 根据Cell类型设置数据
* @param cell
* @return
*/
private String getCellFormatValue(Cell cell) {
String cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case Cell.CELL_TYPE_NUMERIC:
case Cell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式
//方法1:这样子的data格式是带时分秒的:2015-12-18 0:00:00
//cellvalue = cell.getDateCellValue().toLocaleString();
//方法2:这样子的data格式是不带带时分秒的:2011-10-12
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cellvalue = sdf.format(date);
}
// 如果是纯数字
else {
// 取得当前Cell的数值
cellvalue = String.valueOf(df.format(cell.getNumericCellValue()));
}
break;
}
// 如果当前Cell的Type为STRIN
case Cell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
// 默认的Cell值
default:
cellvalue = " ";
}
} else {
cellvalue = "";
}
return cellvalue;
}
}
简单实例代码,实际使用中应该加上异常处理机制:
12345678910111213 FileInputStream is = new FileInputStream(file);
ExcelReader excelReader = new ExcelReader();
String[] title = excelReader.readExcelTitle(is);//读取文件标题(非文件名,而是文件第一行)
for (String str : title) {
System.out.println(str);
}
is.close();
is = new FileInputStream(file);
Map map = excelReader.readExcelContent(is);//读取文件内容
for (int i = 1; i <= map.size(); i++) {
System.out.println(map.get(i));
}
is.close();
相关截图:
POI 的详细介绍:请点这里
POI 的下载地址:请点这里
linux系统处理excel,Apache POI处理Excel文档相关推荐
- [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...
- 关于Apache / poi 生成word文档之后不能正常换行的问题
近期公司项目有个把文本转成word文档的功能,开始使用io操作输出文件的方式(后缀名是docx),使用手机自带的文档浏览工具打开是没有问题的,但是在电脑上用微软office就打开有问题了,于是找了三方 ...
- Java POI Word 写文档
一个使用Apache POI写word文档的实例: 1 package apache.poi; 2 3 import java.io.ByteArrayInputStream; 4 import ja ...
- 【Apache POI】Excel操作(四):Excel大数据量的写入
迷茫代表着你身边还有选择,焦虑意味着你手上还有时间. 有目录,不迷路 前言 超量数据 速率比较 原因剖析 超级版本大救星 往期回顾 前言 之前在下面这期Excel操作: [Apache POI]Exc ...
- Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式
Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式 一.资源 代码实现中的带有计算公式的Excel(xls) 链接:https://pan.bai ...
- Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据
Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据 一.资源 什么是Apache POI Apache POI 不同类型的数据的表格(xls) 链接: ...
- Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls、07版的xlsx)
Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls.07版的xlsx) 一.资源 一个十分好用的日期类型处理包,和Java8搭配使用非常好 ...
- Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)
Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- Apache POI操作Excel导出JAVABEAN对象方法
2019独角兽企业重金招聘Python工程师标准>>> Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件 ...
最新文章
- jquery实现后台系统左侧菜单的点击展开/收缩二级菜单效果
- CentOS下的账户管理
- 一段把mp4中的音频提取并保存在原目录的python脚本
- IT部门的服务工作方式、工作内容有了彻底的改变——安徽移动通信有限责任公司...
- 数据结构五——二叉树
- 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?
- Oracle存储过程及函数的练习题
- Eclipse创建SpringMVC,Spring, Hibernate项目
- jquery 选择器、筛选器、事件绑定与事件委派
- mongod启动问题
- 小米集团本周再回购1920万港元股票
- 【数据结构----笔记1】查找算法之【顺序查找和折半查找】
- Python建立数据库
- 3d模型多怎么优化_近似模型之响应面建模
- dd软件linux,dd工具
- 如何把几张照片拼在一起?
- JavaSE程序分析005 Integer的小事情
- 使用kdevelop出现问题及解决
- 网易视频云:HBase优化实战
- Improving Knowledge-aware Recommendation with Multi-levelInteractive Contrastive Learning
热门文章
- 最新资料!工银亚洲开户见证业务受理网点(深圳地区)
- 生成SQLite的db文件
- 【LibTorch】Microsoft C++ 异常: c10::NotImplementedError,位于内存位置 0x000000E8A9DAEDC0 处。
- 注册表(安全 活动桌面)
- MATLAB自定义拟合函数
- Elasticsearch 分布式搜索引擎 -- 数据聚合(聚合的种类、DSL实现聚合、RestAPI实现聚合)
- mysql根据日周月分组计算
- python批量修改照片的大小
- 微信悄悄新出了个野心很大的App
- c语言大一,C语言复习 大一.doc