今天有个朋友问我,有没有excel表格到处json的方法,在网上找到了好几个工具,都不太理想,于是根据自己的需求,自己写了一个工具。

功能代码
package org.duang.test;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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表格转成json
* @ClassName: Excel2JSONHelper
* @Description:TODO(这里用一句话描述这个类的作用)
* @author LiYonghui
* @date 2017年1月6日 下午4:42:43
*/
public class Excel2JSONHelper {
//常亮,用作第一种模板类型,如下图
private static final int HEADER_VALUE_TYPE_Z=1;
//第二种模板类型,如下图
private static final int HEADER_VALUE_TYPE_S=2;
public static void main(String[] args) {
File dir = new File("e:\\2003.xls");
Excel2JSONHelper excelHelper = getExcel2JSONHelper();
//dir文件,0代表是第一行为保存到数据库或者实体类的表头,一般为英文的字符串,2代表是第二种模板,
JSONArray jsonArray = excelHelper.readExcle(dir, 0, 2);
System.out.println(jsonArray.toString());;
}
/**
*
* 获取一个实例
*/
private static Excel2JSONHelper getExcel2JSONHelper(){
return new Excel2JSONHelper();
}
/**
* 文件过滤
* @Title: fileNameFileter
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param:
* @author LiYonghui
* @date 2017年1月6日 下午4:45:42
* @return: void
* @throws
*/
private boolean fileNameFileter(File file){
boolean endsWith = false;
if(file != null){
String fileName = file.getName();
endsWith = fileName.endsWith(".xls") || fileName.endsWith(".xlsx");
}
return endsWith;
}
/**
* 获取表头行
* @Title: getHeaderRow
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param sheet
* @param: @param index
* @param: @return
* @author LiYonghui
* @date 2017年1月6日 下午5:05:24
* @return: Row
* @throws
*/
private Row getHeaderRow(Sheet sheet, int index){
Row headerRow = null;
if(sheet!=null){
headerRow = sheet.getRow(index);
}
return headerRow;
}
/**
* 获取表格中单元格的value
* @Title: getCellValue
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param row
* @param: @param cellIndex
* @param: @param formula
* @param: @return
* @author LiYonghui
* @date 2017年1月6日 下午5:40:28
* @return: Object
* @throws
*/
private Object getCellValue(Row row,int cellIndex,FormulaEvaluator formula){
Cell cell = row.getCell(cellIndex);
if(cell != null){
switch (cell.getCellType()) {
//String类型
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString();
//number类型
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue().getTime();
} else {
return cell.getNumericCellValue();
}
//boolean类型
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue();
//公式
case Cell.CELL_TYPE_FORMULA:
return formula.evaluate(cell).getNumberValue();
default:
return null;
}
}
return null;
}
/**
* 获取表头value
* @Title: getHeaderCellValue
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param headerRow
* @param: @param cellIndex 英文表头所在的行,从0开始计算哦
* @param: @param type 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致
* @param: @return
* @author LiYonghui
* @date 2017年1月6日 下午6:12:21
* @return: String
* @throws
*/
private String getHeaderCellValue(Row headerRow,int cellIndex,int type){
Cell cell = headerRow.getCell(cellIndex);
String headerValue = null;
if(cell != null){
//第一种模板类型
if(type == HEADER_VALUE_TYPE_Z){
headerValue = cell.getRichStringCellValue().getString();
int l_bracket = headerValue.indexOf("(");
int r_bracket = headerValue.indexOf(")");
if(l_bracket == -1){
l_bracket = headerValue.indexOf("(");
}
if(r_bracket == -1){
r_bracket = headerValue.indexOf(")");
}
headerValue = headerValue.substring(l_bracket+1, r_bracket);
}else if(type == HEADER_VALUE_TYPE_S){
//第二种模板类型
headerValue = cell.getRichStringCellValue().getString();
}
}
return headerValue;
}
/**
* 读取excel表格
* @Title: readExcle
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param file
* @param: @param headerIndex
* @param: @param headType 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致
* @author LiYonghui
* @date 2017年1月6日 下午6:13:27
* @return: void
* @throws
*/
public JSONArray readExcle(File file,int headerIndex,int headType){
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
if(!fileNameFileter(file)){
return null;
}else{
try {
//加载excel表格
WorkbookFactory wbFactory = new WorkbookFactory();
Workbook wb = wbFactory.create(file);
//读取第一个sheet页
Sheet sheet = wb.getSheetAt(0);
//读取表头行
Row headerRow = getHeaderRow(sheet, headerIndex);
//读取数据
FormulaEvaluator formula = wb.getCreationHelper().createFormulaEvaluator();
for(int r = headerIndex+1; r<= sheet.getLastRowNum();r++){
Row dataRow = sheet.getRow(r);
Map<String, Object> map = new HashMap<String, Object>();
for(int h = 0; h<dataRow.getLastCellNum();h++){
//表头为key
String key = getHeaderCellValue(headerRow,h,headType);
//数据为value
Object value = getCellValue(dataRow, h, formula);
if(!key.equals("") && !key.equals("null") && key != null ){
map.put(key, value);
}
}
lists.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
}
JSONArray jsonArray = JSONArray.fromObject(lists);
return jsonArray;
}
}
excel表格模板类型和调用方式
第一种 :用括号把实体类变量名称或者数据库字段名称括起来
调用方法如下:
//表格的名称为2003.xls
File file= new File("e:\\2003.xls");
Excel2JSONHelper excelHelper = getExcel2JSONHelper();
//字母表头为在第1行,第1种模板类型
JSONArray jsonArray = excelHelper.readExcle(file, 1, 1);
第二种: 实体类变量名称或者数据库字段另起一行,如下两张图都行
调用方法如下:
//表格的名称为2003.xls
File file= new File("e:\\2003.xls");
Excel2JSONHelper excelHelper = getExcel2JSONHelper();
//字母表头为在第1行,第2种模板类型
JSONArray jsonArray = excelHelper.readExcle(file, 1, 2);
//表格的名称为2003.xls
File file= new File("e:\\2003.xls");
Excel2JSONHelper excelHelper = getExcel2JSONHelper();
//字母表头为在第2行,第2种模板类型
JSONArray jsonArray = excelHelper.readExcle(file, 2, 2);
jsonArray打印的结果
复制代码 代码如下:
[{"index":"1","name":"李逵","jobNum":"10004","dept":"开发部","job":"android工程师"}, {"index":"2","name":"宋江","jobNum":"10001","dept":"总裁办","job":"总裁"}]
符合我的需求,如果需要复杂的,还需要进行整理,如果有什么意见,请提出来,我及时改进…谢谢
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# excel转json
相关文章:
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站之星如何一键生成手机站?
建站之星导航如何优化提升用户体验?
如何选择服务器才能高效搭建专属网站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何用IIS7快速搭建并优化网站站点?
如何批量查询域名的建站时间记录?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Swift中循环语句中的转移语句 break 和 continue
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何做网站制作流程,*游戏网站怎么搭建?
建站之星安装模板失败:服务器环境不兼容?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何在IIS中新建站点并配置端口与IP地址?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
,南京靠谱的征婚网站?
网站图片在线制作软件,怎么在图片上做链接?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在云虚拟主机上快速搭建个人网站?
建站主机空间推荐 高性价比配置与快速部署方案解析
香港服务器WordPress建站指南:SEO优化与高效部署策略
网站制作软件有哪些,制图软件有哪些?
如何零成本快速生成个人自助网站?
如何通过虚拟机搭建网站?详细步骤解析
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
红河网站制作公司,红河事业单位身份证如何上传?
七夕网站制作视频,七夕大促活动怎么报名?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何在建站主机中优化服务器配置?
如何快速登录WAP自助建站平台?
如何用虚拟主机快速搭建网站?详细步骤解析
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何访问已购建站主机并解决登录问题?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站之家VIP精选网站模板与SEO优化教程整合指南
开源网站制作软件,开源网站什么意思?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何配置支付宝与微信支付功能?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何用VPS主机快速搭建个人网站?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
制作网站的软件免费下载,免费制作app哪个平台好?
如何生成腾讯云建站专用兑换码?
建站之星3.0如何解决常见操作问题?
深入理解Android中的xmlns:tools属性
如何在万网ECS上快速搭建专属网站?
北京的网站制作公司有哪些,哪个视频网站最好?
*请认真填写需求信息,我们会在24小时内与您取得联系。