1. package com.jpcar.utils;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.lang.reflect.Field;
  8. import java.util.ArrayList;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13.  
  14. import org.apache.poi.ss.usermodel.Cell;
  15. import org.apache.poi.xssf.usermodel.XSSFCell;
  16. import org.apache.poi.xssf.usermodel.XSSFRow;
  17. import org.apache.poi.xssf.usermodel.XSSFSheet;
  18. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  19.  
  20. import com.alibaba.fastjson.JSON;
  21. import com.alibaba.fastjson.serializer.SerializerFeature;
  22. import com.jpcar.model.entity.ToolboxValue;
  23.  
  24. public class ExcelUtil {
  25. private static final char UNDERLINE = '_';
  26.  
  27. public static void main(String[] args) throws Exception {
  28. Map<String, String> map = new HashMap<>();
  29. map.put("toolboxId", "toolbox_id");
  30. InputStream in = new FileInputStream(new File("F:\\test\\config\\toolbox_value.xlsx"));
  31. List<ToolboxValue> list = parse(in, ToolboxValue.class, map);
  32. System.out.println(list);
  33. System.out.println("-------------------------");
  34. System.out.println(toJsonByExcel(list, ToolboxValue.class, map));
  35. }
  36.  
  37. public static <T> List<T> parse(InputStream in, Class<T> cla) throws Exception {
  38. return parse(in, cla, null);
  39. }
  40.  
  41. /**
  42. *
  43. * @param in
  44. * @param cla
  45. * @param mapper
  46. * Map<FieldName, ExcelName>
  47. * @return
  48. * @throws IOException
  49. */
  50. public static <T> List<T> parse(InputStream in, Class<T> cla, Map<String, String> mapper) throws Exception {
  51. List<T> list = new ArrayList<>();
  52. Field[] fs = cla.getDeclaredFields();
  53. Map<String, Field> map = new HashMap<>();
  54. for (Field f : fs) {
  55. String fn = f.getName();
  56. if (null != mapper) {
  57. fn = mapper.get(fn);
  58. if (null == fn)
  59. fn = camelToUnderline(f.getName());
  60. } else {
  61. fn = camelToUnderline(fn);
  62. }
  63. map.put(fn, f);
  64. }
  65.  
  66. XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
  67. XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
  68.  
  69. int rowstart = xssfSheet.getFirstRowNum();
  70. int rowEnd = xssfSheet.getLastRowNum();
  71. int cellSize = xssfSheet.getRow(0).getPhysicalNumberOfCells();
  72. List<String> keys = new ArrayList<>();
  73. for (int i = rowstart; i <= rowEnd; i++) {
  74. if (i == 0) {
  75. XSSFRow row = xssfSheet.getRow(0);
  76. for (int j = 0; j < cellSize; j++) {
  77. String key = row.getCell(j).getStringCellValue();
  78. keys.add(key);
  79. }
  80. continue;
  81. }
  82. T t = cla.newInstance();
  83. XSSFRow row = xssfSheet.getRow(i);
  84. for (int j = 0; j < cellSize; j++) {
  85. String str = keys.get(j);
  86. Field f = map.get(str);
  87. if (null == f)
  88. continue;
  89. f.setAccessible(true);
  90. String type = f.getType().getName();
  91. XSSFCell cell = row.getCell(j);
  92. if (type.equals("int") || "java.lang.Integer".equals(type)) {
  93. int val = (int) cell.getNumericCellValue();
  94. f.set(t, val);
  95. } else if ("double".equals(type) || "java.lang.Double".equals(type)) {
  96. double val = cell.getNumericCellValue();
  97. f.set(t, val);
  98. } else if ("java.lang.String".equals(type)) {
  99. String val = "";
  100. if (cell.getCellType() != Cell.CELL_TYPE_STRING) {
  101. val = (int) cell.getNumericCellValue() + "";
  102. } else {
  103. val = cell.getStringCellValue();
  104. }
  105. f.set(t, val);
  106. } else if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) {
  107. boolean val = cell.getBooleanCellValue();
  108. f.set(t, val);
  109. } else if ("java.util.Date".equals(type)) {
  110. Date val = cell.getDateCellValue();
  111. f.set(t, val);
  112. }
  113. }
  114. list.add(t);
  115. }
  116.  
  117. return list;
  118. }
  119.  
  120. public static <T> String toJsonByExcel(List<T> list, Class<T> cla) throws Exception {
  121. return toJsonByExcel(list, cla, null);
  122. }
  123.  
  124. public static <T> String toJsonByExcel(List<T> list, Class<T> cla, Map<String, String> mapper) throws Exception {
  125. if (null == list || list.size() == 0)
  126. return null;
  127. Field[] fs = cla.getDeclaredFields();
  128. List<Map<String, Object>> l = new ArrayList<>();
  129. for (T t : list) {
  130. Map<String, Object> map = new HashMap<>();
  131. for (Field f : fs) {
  132. f.setAccessible(true);
  133. Object obj = f.get(t);
  134. if (null == obj) {
  135. String type = f.getType().getName();
  136. if (type.equals("int") || "java.lang.Integer".equals(type)) {
  137. obj = 0;
  138. } else if ("double".equals(type) || "java.lang.Double".equals(type)) {
  139. obj = 0.0;
  140. } else if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) {
  141. obj = false;
  142. } else {
  143. obj = "";
  144. }
  145. }
  146. String key = f.getName();
  147. if (key.equals("serialVersionUID"))
  148. continue;
  149. if (null != mapper) {
  150. key = mapper.get(key);
  151. if (null == key)
  152. key = camelToUnderline(f.getName());
  153. } else {
  154. key = camelToUnderline(key);
  155. }
  156. map.put(key, obj);
  157. }
  158. l.add(map);
  159. }
  160. return JSON.toJSONString(l, SerializerFeature.WriteNullNumberAsZero,
  161. SerializerFeature.WriteNonStringValueAsString);
  162. }
  163.  
  164. public static String underlineToCamel(String str) {
  165. if (str == null || "".equals(str.trim())) {
  166. return "";
  167. }
  168. int len = str.length();
  169. StringBuilder sb = new StringBuilder(len);
  170. for (int i = 0; i < len; i++) {
  171. char c = str.charAt(i);
  172. if (c == UNDERLINE) {
  173. if (++i < len) {
  174. sb.append(Character.toUpperCase(str.charAt(i)));
  175. }
  176. } else {
  177. sb.append(c);
  178. }
  179. }
  180. return sb.toString();
  181. }
  182.  
  183. public static String camelToUnderline(String param) {
  184. if (param == null || "".equals(param.trim())) {
  185. return "";
  186. }
  187. int len = param.length();
  188. StringBuilder sb = new StringBuilder(len);
  189. for (int i = 0; i < len; i++) {
  190. char c = param.charAt(i);
  191. if (Character.isUpperCase(c)) {
  192. sb.append(UNDERLINE);
  193. sb.append(Character.toLowerCase(c));
  194. } else {
  195. sb.append(c);
  196. }
  197. }
  198. return sb.toString();
  199. }
  200. }

解析Excel的更多相关文章

  1. POI完美解析Excel数据到对象集合中(可用于将EXCEL数据导入到数据库)

    实现思路: 1.获取WorkBook对象,在这里使用WorkbookFactory.create(is); // 这种方式解析Excel.2003/2007/2010都没问题: 2.对行数据进行解析 ...

  2. oracle xmltype导入并解析Excel数据--前言

    通常,很多的时候,我们需要导入Excel数据到系统中,但是Excel数据需要我们去各种校验,比如身份证校验,手机号码校验等等. 校验失败的数据,提供Excel导出错误原因,提示给用户. 如此,如果校验 ...

  3. java POI 解析excel 2003和2007 直接转为List<Map> 返回

    1.POI 官网下载jar包,3.5以上 2.项目导入jar包 3.参数:String数组--对应的excel列名对应的KEY,File  excel文件,sheetNumber ---excel的s ...

  4. java--POI解析excel兼容性问题

    近日,使用POI解析excel,发现2003版本的excel解析与2007版本的excel解析存在问题.特此总结: 1.所需jar包 : 2.java类代码(读取excel文件): public vo ...

  5. java 使用 poi 解析excel

    背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...

  6. 用jxl解析excel内容

    需要导入jxl.jar 下方表格为excel中内容: 序号 姓名 性别 生日 地址 1 测试1 男 1990-1-1 北京朝阳区 2 测试2 女 1998-2-2 北京海淀 3 测试3 男 1999- ...

  7. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

  8. Java:JXL解析Excel文件

    项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...

  9. c++ 读取并解析excel文件方法

    用Cocos开发模型特效工具编辑器,跨Mac和windows,当中有个需求是读取并解析excel文件,但网上的查找的例子几乎都只能是在windows下面使用,再或者是命令行脚本之类的.于是,自己写了一 ...

  10. Android解析Excel文档完整示例

    MainActivity如下: package cc.testexcel; import java.io.File; import jxl.Cell; import jxl.CellType; imp ...

随机推荐

  1. [NOI2010] 能量采集 (数学)

    [NOI2010] 能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. ...

  2. 题解【CF277E Binary Tree on Plane】

    Description 给你平面上 \(n\) 个点 \((2 \leq n \leq 400)\),要求用这些点组成一个二叉树(每个节点的儿子节点不超过两个),定义每条边的权值为两个点之间的欧几里得 ...

  3. bzoj 3209 bzoj1799 数位dp

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2267  Solved: 1040[Submit][Status][Disc ...

  4. CentOS6.6安装heartbeat配置资源切换操作笔记实现高可用(原创)

    参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html   背景需求: 使用heartbeat来做HA集群,并且把n ...

  5. grep index.php *

    zb@zb-computer:/usr/local/nginx/conf/vhost$ grep index.php * caomall17.conf: index index.html index. ...

  6. Python-- Redis Set

    一.无序集合 Set操作,Set集合就是不允许重复的列表 1.1 sadd(name, values) # name对应的集合中添加元素 1.2 smembers(name) # 获取name对应的集 ...

  7. Java设计模式の责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  8. Tomcat处理一个http请求的过程

    假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Con ...

  9. [数据库中间件]centos6.6下配置libzdb所产生的错误

    1.关于gmtime_r.timegm的隐藏声明错误,从系统的time.h中复制两个函数引用到libzdb自己定义的time.h,代码如下: extern struct tm *gmtime_r (c ...

  10. 微信小程序开发(二)创建小程序

    安装完“微信Web开发者工具”后,手机扫描二维码进入页面. 点击“添加项目”,填入之前获得的AppID(无AppID可忽略),输入项目名称“Hello WXapplet”,选定本地文件夹作为项目目录. ...