解析Excel
package com.jpcar.utils; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.poi.ss.usermodel.Cell;
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; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.jpcar.model.entity.ToolboxValue; public class ExcelUtil {
private static final char UNDERLINE = '_'; public static void main(String[] args) throws Exception {
Map<String, String> map = new HashMap<>();
map.put("toolboxId", "toolbox_id");
InputStream in = new FileInputStream(new File("F:\\test\\config\\toolbox_value.xlsx"));
List<ToolboxValue> list = parse(in, ToolboxValue.class, map);
System.out.println(list);
System.out.println("-------------------------");
System.out.println(toJsonByExcel(list, ToolboxValue.class, map));
} public static <T> List<T> parse(InputStream in, Class<T> cla) throws Exception {
return parse(in, cla, null);
} /**
*
* @param in
* @param cla
* @param mapper
* Map<FieldName, ExcelName>
* @return
* @throws IOException
*/
public static <T> List<T> parse(InputStream in, Class<T> cla, Map<String, String> mapper) throws Exception {
List<T> list = new ArrayList<>();
Field[] fs = cla.getDeclaredFields();
Map<String, Field> map = new HashMap<>();
for (Field f : fs) {
String fn = f.getName();
if (null != mapper) {
fn = mapper.get(fn);
if (null == fn)
fn = camelToUnderline(f.getName());
} else {
fn = camelToUnderline(fn);
}
map.put(fn, f);
} XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); int rowstart = xssfSheet.getFirstRowNum();
int rowEnd = xssfSheet.getLastRowNum();
int cellSize = xssfSheet.getRow(0).getPhysicalNumberOfCells();
List<String> keys = new ArrayList<>();
for (int i = rowstart; i <= rowEnd; i++) {
if (i == 0) {
XSSFRow row = xssfSheet.getRow(0);
for (int j = 0; j < cellSize; j++) {
String key = row.getCell(j).getStringCellValue();
keys.add(key);
}
continue;
}
T t = cla.newInstance();
XSSFRow row = xssfSheet.getRow(i);
for (int j = 0; j < cellSize; j++) {
String str = keys.get(j);
Field f = map.get(str);
if (null == f)
continue;
f.setAccessible(true);
String type = f.getType().getName();
XSSFCell cell = row.getCell(j);
if (type.equals("int") || "java.lang.Integer".equals(type)) {
int val = (int) cell.getNumericCellValue();
f.set(t, val);
} else if ("double".equals(type) || "java.lang.Double".equals(type)) {
double val = cell.getNumericCellValue();
f.set(t, val);
} else if ("java.lang.String".equals(type)) {
String val = "";
if (cell.getCellType() != Cell.CELL_TYPE_STRING) {
val = (int) cell.getNumericCellValue() + "";
} else {
val = cell.getStringCellValue();
}
f.set(t, val);
} else if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) {
boolean val = cell.getBooleanCellValue();
f.set(t, val);
} else if ("java.util.Date".equals(type)) {
Date val = cell.getDateCellValue();
f.set(t, val);
}
}
list.add(t);
} return list;
} public static <T> String toJsonByExcel(List<T> list, Class<T> cla) throws Exception {
return toJsonByExcel(list, cla, null);
} public static <T> String toJsonByExcel(List<T> list, Class<T> cla, Map<String, String> mapper) throws Exception {
if (null == list || list.size() == 0)
return null;
Field[] fs = cla.getDeclaredFields();
List<Map<String, Object>> l = new ArrayList<>();
for (T t : list) {
Map<String, Object> map = new HashMap<>();
for (Field f : fs) {
f.setAccessible(true);
Object obj = f.get(t);
if (null == obj) {
String type = f.getType().getName();
if (type.equals("int") || "java.lang.Integer".equals(type)) {
obj = 0;
} else if ("double".equals(type) || "java.lang.Double".equals(type)) {
obj = 0.0;
} else if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) {
obj = false;
} else {
obj = "";
}
}
String key = f.getName();
if (key.equals("serialVersionUID"))
continue;
if (null != mapper) {
key = mapper.get(key);
if (null == key)
key = camelToUnderline(f.getName());
} else {
key = camelToUnderline(key);
}
map.put(key, obj);
}
l.add(map);
}
return JSON.toJSONString(l, SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNonStringValueAsString);
} public static String underlineToCamel(String str) {
if (str == null || "".equals(str.trim())) {
return "";
}
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
if (c == UNDERLINE) {
if (++i < len) {
sb.append(Character.toUpperCase(str.charAt(i)));
}
} else {
sb.append(c);
}
}
return sb.toString();
} public static String camelToUnderline(String param) {
if (param == null || "".equals(param.trim())) {
return "";
}
int len = param.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = param.charAt(i);
if (Character.isUpperCase(c)) {
sb.append(UNDERLINE);
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
}
解析Excel的更多相关文章
- POI完美解析Excel数据到对象集合中(可用于将EXCEL数据导入到数据库)
实现思路: 1.获取WorkBook对象,在这里使用WorkbookFactory.create(is); // 这种方式解析Excel.2003/2007/2010都没问题: 2.对行数据进行解析 ...
- oracle xmltype导入并解析Excel数据--前言
通常,很多的时候,我们需要导入Excel数据到系统中,但是Excel数据需要我们去各种校验,比如身份证校验,手机号码校验等等. 校验失败的数据,提供Excel导出错误原因,提示给用户. 如此,如果校验 ...
- java POI 解析excel 2003和2007 直接转为List<Map> 返回
1.POI 官网下载jar包,3.5以上 2.项目导入jar包 3.参数:String数组--对应的excel列名对应的KEY,File excel文件,sheetNumber ---excel的s ...
- java--POI解析excel兼容性问题
近日,使用POI解析excel,发现2003版本的excel解析与2007版本的excel解析存在问题.特此总结: 1.所需jar包 : 2.java类代码(读取excel文件): public vo ...
- java 使用 poi 解析excel
背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...
- 用jxl解析excel内容
需要导入jxl.jar 下方表格为excel中内容: 序号 姓名 性别 生日 地址 1 测试1 男 1990-1-1 北京朝阳区 2 测试2 女 1998-2-2 北京海淀 3 测试3 男 1999- ...
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
- Java:JXL解析Excel文件
项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...
- c++ 读取并解析excel文件方法
用Cocos开发模型特效工具编辑器,跨Mac和windows,当中有个需求是读取并解析excel文件,但网上的查找的例子几乎都只能是在windows下面使用,再或者是命令行脚本之类的.于是,自己写了一 ...
- Android解析Excel文档完整示例
MainActivity如下: package cc.testexcel; import java.io.File; import jxl.Cell; import jxl.CellType; imp ...
随机推荐
- [CodeForces]String Reconstruction
http://codeforces.com/contest/828/problem/C 并查集的神奇应用. #include<bits/stdc++.h> using namespace ...
- python 字符串前缀u, r, b小结
http://note.youdao.com/noteshare?id=a0da9c2d044d270fa8cb162b932c47e8
- STL源码分析-rbtree
http://note.youdao.com/noteshare?id=4f8d16e565478b4e98bf2e56ce98a28e
- centos7安装ZABBIX 3.0+ 邮件报警【OK】
设置主机名: vi /etc/hosts 10.0.0.252 zabbix-server hostnamectl set-hostname 关闭防火墙: systemctl stop firew ...
- python 深、浅拷贝
Python的数据结构总体分为两类: 1.字符串和数字 2.列表.元组.字典等 一.字符串和数字 对于字符串和数字而言,赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都没有意义,因为它 ...
- webpack4.0.1安装问题及解决方法
2月底的时候,webpack4正式发布了,但是当我们安装之后,使用下面的语句来打包的时候,发现打包失败了 webpack ./src/main.js ./dist/bundle.js 并且给出了下面这 ...
- Codeforces 807 C. Success Rate
http://codeforces.com/problemset/problem/807/C C. Success Rate time limit per test 2 seconds memory ...
- jQuery UI基本使用方法
其实jQuery UI早就在我的学习计划中,只不过因为计划安排始终处于待命状态,最近项目要用到jQuery UI,就提前学习一下,也想能够封装自己的UI库,这样就不用老按照别人的套路走了,像使用jQu ...
- Angular测试遇到的小坑
Angular测试遇到的小坑 Error: Expected to be running in 'ProxyZone', but it was not found 检查doneFn的写法是否正确,位置 ...
- BestCoder Round #40 解题报告
这场是第一场没有米的BC... 大概也是想震一震那些一听说没米了就不打BC的人吧 这次的题目质量比以往高了许多 (然而我并没有打这一场BC 但是今天下午到现在做的过程中真的学到了不少知识呢 A题略水. ...