使用xml去解析excel
来源:互联网 发布:centos恢复出厂设置 编辑:程序博客网 时间:2024/05/21 08:08
目录
使用xml去对应的解析excel中数据,在xml中规定 数据的格式,
excel格式
其中 前三项是明显的 特殊信息,但是后面的内容 就是 公共内容了,而且要求可以 将excel 中的列名存入数据库字段中,所以使用xml
xml格式
注意解析的excel中的列名的名字和这个配置文件需要对应起来,这个配置文件是存放在 resource中,
<?xml version="1.0" encoding="UTF-8"?><TargetFromatList> <content> <name>售后服务综合指标</name> <type>百分比</type> </content> <content> <name>售后处理时效(退款时长)</name> <type>小数点</type> <precision>2</precision> </content> </TargetFromatList>
xml对应的实体类
用于存放 xml中的信息
public class TargetUploadNumberFormat { String name; String type; int precision; setter getter....
具体实现1
List<TargetUploadNumberFormat> uploadFormat=new ArrayList<TargetUploadNumberFormat>(); try { uploadFormat = XmlUtil.getFromatList(); } catch (Exception e) { LOGGER.error("解析xml出错",e); }
xmlutil
import org.dom4j.Element;import java.io.File; import org.dom4j.Document;import org.dom4j.io.SAXReader; import java.lang.reflect.Field; import org.springframework.util.ResourceUtils;public class XmlUtil { private static final Logger logger = LoggerFactory.getLogger(XmlUtil.class); public static List<TargetUploadNumberFormat> getFromatList() throws Exception { SAXReader reader = new SAXReader(); List<TargetUploadNumberFormat> list = new ArrayList<TargetUploadNumberFormat>(); // 通过read方法读取一个文件 转换成Document对象 File filepath=ResourceUtils.getFile("classpath:TargetUpload.xml"); Document document = reader.read(filepath); //获取根节点元素对象 Element node = document.getRootElement(); //遍历所有的元素节点 Iterator<Element> it = node.elementIterator("content");// 获取根节点下所有content while (it.hasNext()) { Element elementGroupService = (Element) it.next(); TargetUploadNumberFormat baseBean = (TargetUploadNumberFormat) fromXmlToBean( elementGroupService, TargetUploadNumberFormat.class); list.add(baseBean); } return list; } @SuppressWarnings("rawtypes") public static Object fromXmlToBean(Element rootElt, Class pojo) throws Exception { // 首先得到pojo所定义的字段 Field[] fields = pojo.getDeclaredFields(); // 根据传入的Class动态生成pojo对象 Object obj = pojo.newInstance(); for (Field field : fields) { // 设置字段可访问(必须,否则报错) field.setAccessible(true); // 得到字段的属性名 String name = field.getName(); // 这一段的作用是如果字段在Element中不存在会抛出异常,如果出异常,则跳过。 try { rootElt.elementTextTrim(name); } catch (Exception ex) { continue; } if (rootElt.elementTextTrim(name) != null && !"".equals(rootElt.elementTextTrim(name))) { // 根据字段的类型将值转化为相应的类型,并设置到生成的对象中。 if (field.getType().equals(Long.class) || field.getType().equals(long.class)) { field.set(obj, Long.parseLong(rootElt.elementTextTrim(name))); } else if (field.getType().equals(String.class)) { field.set(obj, rootElt.elementTextTrim(name)); } else if (field.getType().equals(Double.class) || field.getType().equals(double.class)) { field.set(obj, Double.parseDouble(rootElt.elementTextTrim(name))); } else if (field.getType().equals(Integer.class) || field.getType().equals(int.class)) { field.set(obj, Integer.parseInt(rootElt.elementTextTrim(name))); } else if (field.getType().equals(java.util.Date.class)) { field.set(obj, Date.parse(rootElt.elementTextTrim(name))); } else { continue; } } } return obj; }}
具体实现2
拿到具体的对应 entity后,
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) { Row row = sheet.getRow(i); if (row==null) { continue; } String shopsName = ExcelUtil.getStringCellValue(row.getCell(0)).trim(); for (int j = 0; j <uploadFormat.size() ; j++) { TargetUploadNumberFormat fromat=uploadFormat.get(j); String source=ExcelUtil.getStringCellValue(row.getCell(5+j)).trim(); if (StringUtils.isNullOrBlank(source)) { continue; } String error= formatCheck(fromat,source); if (error!=null&&!error.equals("")) { StringBuffer err=new StringBuffer(); err.append(" 第 ").append(i+1).append("行数据错误,").append(error); errorMsg.add(err.toString()); continue; } TblTargetUploadInfo uploadInfo=new TblTargetUploadInfo(); uploadInfo.setShopsName(shopsName); uploadInfo.setTargetName(uploadFormat.get(j).getName()); if (fromat.getType().equals("百分比")&&source.indexOf("%")>-1){ source=source.replace("%",""); BigDecimal num = new BigDecimal(0.01); uploadInfo.setScore( new BigDecimal(source).multiply(num)); } else{ uploadInfo.setScore(new BigDecimal(source)); } targetUploadInfos.add(uploadInfo); } }
校验的函数
private String formatCheck(TargetUploadNumberFormat targetUploadNumberFormat, String trim) { StringBuffer error = new StringBuffer(); StringBuffer regExp = new StringBuffer(); if (targetUploadNumberFormat.getType().equals("整数")) { regExp.append("^[0-9]*[1-9][0-9]*$"); } if (targetUploadNumberFormat.getType().equals("小数点")) { regExp.append("^[1-9][0-9]*(\\.[0-9]{1," + targetUploadNumberFormat.getPrecision() + "})?$"); } if (targetUploadNumberFormat.getType().equals("百分比")) { regExp.append("^\\d+\\.?\\d*\\%?$"); } Pattern p = Pattern.compile(regExp.toString()); Matcher m = p.matcher(trim); if (!m.find()) { error.append(" 指标 : ") .append(targetUploadNumberFormat.getName()).append("的类型为") .append(targetUploadNumberFormat.getType()) ; if (targetUploadNumberFormat.getPrecision() != 0) { error.append("小数点后最多").append(targetUploadNumberFormat.getPrecision()).append("位"); } error.append(" ,当前excel数据为").append(trim); error.append(" , 请检查。"); } return error.toString(); }
阅读全文
0 0
- 使用xml去解析excel
- dom去解析xml
- DOM去解析XML文件
- springmvc 使用BeanNameViewResolver解析excel,pdf,json,xml视图
- 使用POI和dom4j来解析Excel生成Xml
- jdom去操作xml文件 解析XML
- C#解析xml/json/excel
- Open Xml -- Excel文件解析
- 解析xml模板导出Excel
- 如何去解析一个xml字符串
- 使用jackson去解析json
- 使用poi解析Excel
- 使用poi解析Excel
- 使用poi解析Excel
- 使用poi解析Excel
- 使用poi解析Excel
- 使用poi解析Excel
- 使用POI解析Excel
- 公安大数据应用之情报分析与关联挖掘
- C语言编译过程浅析
- iOS转前端之仿写宠物网(适配不同尺寸)
- 8月23号 jsp分页查询
- SQL server 2008 中 对象名无效的问题
- 使用xml去解析excel
- git visual references
- 判断一颗树是否是完全二叉树
- css实现接地气的checkbox框
- 利用人工智能解决选择困难症 以高考填志愿为例
- C#中DataGridView控件使用
- 来一场说写就写的博客写程
- Leetcode 605(Java)
- 【Unity】Unity Pivot 与 Center 的问题