解析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 ...
随机推荐
- [NOI2010] 能量采集 (数学)
[NOI2010] 能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. ...
- 题解【CF277E Binary Tree on Plane】
Description 给你平面上 \(n\) 个点 \((2 \leq n \leq 400)\),要求用这些点组成一个二叉树(每个节点的儿子节点不超过两个),定义每条边的权值为两个点之间的欧几里得 ...
- bzoj 3209 bzoj1799 数位dp
3209: 花神的数论题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2267 Solved: 1040[Submit][Status][Disc ...
- CentOS6.6安装heartbeat配置资源切换操作笔记实现高可用(原创)
参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html 背景需求: 使用heartbeat来做HA集群,并且把n ...
- grep index.php *
zb@zb-computer:/usr/local/nginx/conf/vhost$ grep index.php * caomall17.conf: index index.html index. ...
- Python-- Redis Set
一.无序集合 Set操作,Set集合就是不允许重复的列表 1.1 sadd(name, values) # name对应的集合中添加元素 1.2 smembers(name) # 获取name对应的集 ...
- Java设计模式の责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- Tomcat处理一个http请求的过程
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Con ...
- [数据库中间件]centos6.6下配置libzdb所产生的错误
1.关于gmtime_r.timegm的隐藏声明错误,从系统的time.h中复制两个函数引用到libzdb自己定义的time.h,代码如下: extern struct tm *gmtime_r (c ...
- 微信小程序开发(二)创建小程序
安装完“微信Web开发者工具”后,手机扫描二维码进入页面. 点击“添加项目”,填入之前获得的AppID(无AppID可忽略),输入项目名称“Hello WXapplet”,选定本地文件夹作为项目目录. ...