ExcelParser ,Excel解析的工具类(正对解析xlsx)
package cn.com.css.common.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
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;
public class ExcelParser {
private XSSFWorkbook xssfWorkbook;
private XSSFSheet xssfSheet;
private XSSFRow xssfRow;
private int columnNumbers;
private int totalRows;
/**
* @param args
* @throws Exception
*/
private String getCellFormatValue(XSSFCell cell) {
String cellvalue = "";
if (cell != null) {
// 推断当前Cell的Type
switch (cell.getCellType()) {
// 假设当前Cell的Type为NUMERIC
case XSSFCell.CELL_TYPE_NUMERIC: {
BigDecimal big = new BigDecimal(cell.getNumericCellValue());
cellvalue = big.toString();
break;
}
case XSSFCell.CELL_TYPE_FORMULA: {
// 推断当前的cell是否为Date
/*
* if (XSSFDateUtil.isCellDateFormatted(cell)) { //
* 假设是Date类型则,转化为Data格式
*
* //方法1:这样子的data格式是带时分秒的:2011-10-12 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(cell.getNumericCellValue()); }
*/
BigDecimal bigula = new BigDecimal(cell
.getCachedFormulaResultType());
cellvalue = bigula.toString();
break;
}
// 假设当前Cell的Type为STRIN
case HSSFCell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
// 默认的Cell值
default:
cellvalue = " ";
}
} else {
cellvalue = "";
}
return cellvalue;
}
/**
* \brief 通过这种方法获得Excel中的列名和一些excel的初始化信息,比方行数和列数
*
* @param is
* @return
* @attention
* @author 涂作权
* @date 2014-5-27
* @note begin modify by null
*/
public String[] getTitle(InputStream is) {
try {
xssfWorkbook = new XSSFWorkbook(is);
} catch (IOException e) {
e.printStackTrace();
}
xssfSheet = xssfWorkbook.getSheetAt(0);
System.out.println("xssfSheet.getSheetName() = " + xssfSheet.getSheetName());
// 获得行数
totalRows = xssfSheet.getLastRowNum();
System.out.println("totalRows = " + totalRows);
xssfRow = xssfSheet.getRow(0);// first line:title
// 获得列数
columnNumbers = xssfRow.getPhysicalNumberOfCells();
System.out.println("columnNumbers = " + columnNumbers);
// 列名的集合
String[] title = new String[columnNumbers];
for (int i = 0; i < columnNumbers; i++) {
title[i] = getCellFormatValue(xssfRow.getCell(i));
}
// 返回的是列名的数组
return title;
}
public Map<Integer, String> readExcelContent(InputStream is) {
getTitle(is);
Map<Integer, String> content = new HashMap<Integer, String>();
String str = "";
// 正文内容应该从第二行開始,第一行为表头的标题
for (int i = 1; i <= totalRows; i++) {
xssfRow = xssfSheet.getRow(i);
int j = 0;
while (j <= columnNumbers) {
String cell = getCellFormatValue(xssfRow.getCell(j)).trim();
if (cell == "") {
j++;
continue;// cell="null";
}
str += cell + "\t";
j++;
}
str.trim();
content.put(i, str);
str = "";
}
return content;
}
public XSSFWorkbook getXssfWorkbook() {
return xssfWorkbook;
}
public void setXssfWorkbook(XSSFWorkbook xssfWorkbook) {
this.xssfWorkbook = xssfWorkbook;
}
public XSSFSheet getXssfSheet() {
return xssfSheet;
}
public void setXssfSheet(XSSFSheet xssfSheet) {
this.xssfSheet = xssfSheet;
}
public XSSFRow getXssfRow() {
return xssfRow;
}
public void setXssfRow(XSSFRow xssfRow) {
this.xssfRow = xssfRow;
}
public int getColumnNumbers() {
return columnNumbers;
}
public void setColumnNumbers(int columnNumbers) {
this.columnNumbers = columnNumbers;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public static void main(String[] args) throws Exception {
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
ExcelParser ep = new ExcelParser();
InputStream is = new FileInputStream(new File("D:\\产品管理模板.xlsx"));
//String[] titles = ep.getTitle(is);
Map<Integer, String> map = ep.readExcelContent(is);
for (int i = 1; i <= map.size(); i++) {
String row = map.get(i);
String rowArr[] = row.split(" ");
// 假设每行里面有大于3列信息
String cell0 = rowArr[0]; // 产品名
String cell1 = rowArr[1]; // 国家编码
System.out.println(cell0 + "\t" + cell1);
//System.out.println(map.size());
}
is.close();
is = null;
}
}
ExcelParser ,Excel解析的工具类(正对解析xlsx)的更多相关文章
- Java解析Excel工具类(兼容xls和xlsx)
依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...
- Excel解析easyexcel工具类
Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- Java基础学习总结(49)——Excel导入导出工具类
在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- Excel导入工具类兼容xls和xlsx
package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- android 解析XML 工具类
/** * Created by John on 2016/3/29. */ public class XmlParser { private static final String ns = nul ...
- 导入导出Excel的Java工具类ExcelUtil
在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单 ...
随机推荐
- Java学习之位运算和逻辑运算符
今天看了一下HashMap类的源码,在HashMap的源码中定义了初始空间的大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 当 ...
- YII2 使用js
1.在 /backend/assets/ 中新建一个文件 CollectionAsset.php <?php /** * @link http://www.yiiframework.com/ * ...
- 第2章 Python基础语法--Hello python
第2章 基础语法 2.1 基本介绍 2.1.1 Hello python 每个语言的开始都是从”HelloWorld”开始的,我们也不例外.打开已经安装好的Python编译环境,至于Python如何安 ...
- php基本框架
- jQuery.form 中的 ajaxForm() 和 ajaxSubmit()
官方例子 http://malsup.com/jquery/form/#ajaxForm官方API http://malsup.com/jquery/form/#api中文API http: ...
- hibernate 数据关联一对多 3.1
一对多,多对一 (在多的一端存放一的外键) 但是在实体类中不需要创建这个外键 // 在一的一方创建Set集合 public class User { private Integer id; priva ...
- 转:30分钟掌握STL
三十分钟掌握STL 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有 ...
- lua学习:使用Lua处理游戏数据
在之前lua学习:lua作配置文件里,我们学会了用lua作配置文件. 其实lua在游戏开发中可以作为一个强大的保存.载入游戏数据的工具. 1.载入游戏数据 比如说,现在我有一份表单: data.xls ...
- elk 搭建
elk 平台搭建: ELK平台搭建 系统环境 System: Centos release 6.7 (Final) ElasticSearch: 2.1.0 Logstash: 2.1.1 Kiban ...
- 复习知识点:XML解析数据,JOSN解析数据,GET请求数据,POST请求数据
GDataXMLDocument-XML解析 #pragma mark - ======== Dom XML解析 - (IBAction)domParserActionXML_Document:(id ...