说明:适合数据库导出为xml时转成Excel

本工具将上传至GitHub:https://github.com/xiaostudy/xiaostudyAPI3

doc4j的maven依赖

 <!--xml解析的dom4j-->
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>

主要代码

package com.xiaostudy.util;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; import java.io.File;
import java.util.ArrayList;
import java.util.List; /**
* XML工具类
* @author xiaostudy
* @date 2019.4.26
* @version 1.0.0
*/
public class XmlUtil { public static void main(String[] args) {
Boolean aBoolean = Xml2ExcelFile("C:\\Users\\Administrator\\Desktop\\test.xml", "C:\\Users\\Administrator\\Desktop\\test2.xlsx");
System.out.println(aBoolean);
} /**
* Xml转Excel文件
* @param strXmlFilePath Xml文件路径
* @param strExcleFilePath Excel文件存放路径
* @return
*/
public static Boolean Xml2ExcelFile(String strXmlFilePath, String strExcleFilePath) {
if(StringUtil.isTrimNull(strXmlFilePath) || StringUtil.isTrimNull(strExcleFilePath)) {
return false;
} List<List<String>> listList = readXml(strXmlFilePath);
if(null == listList || listList.isEmpty()) {
return false;
} return ExcelUtil.createExcelFile(strExcleFilePath, listList);
} /**
* 读取Xml文件,以List<List<String>>形式返回
* @param strFile
* @return
*/
public static List<List<String>> readXml(String strFile) {
if(StringUtil.isTrimNull(strFile)) {
return null;
} SAXReader reader = new SAXReader();
File file = new File(strFile);
if(!file.exists() || !file.isFile()) {
return null;
} Document document = null;
try {
document = reader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
List<List<String>> listList = new ArrayList<>(); if (null != document) {
Element root = document.getRootElement();
List<Element> childElements = root.elements();
List<String> titleList = new ArrayList<>();
listList.add(titleList);
boolean flag = true;
for (Element child : childElements) {
List<String> list = new ArrayList<>(); List<Element> elementList = child.elements();
for (Element ele : elementList) {
if(flag) {
titleList.add(ele.getName());
}
list.add(ele.getText());
}
flag = false; listList.add(list); System.out.println();
}
} return listList;
}
}

依赖的工具类GitHub上有https://github.com/xiaostudy/xiaostudyAPI3

StringUtil.isTrimNull

 public static boolean isTrimNull(Object obj) {
if (null != obj) {
return isNull(obj.toString().trim());
} else {
return true;
}
}

Excel.createExcelFile

 public static <T> Boolean createExcelFile(String fileName, List<List<T>> list) {
logger.debug(">>>>>" + CLASSNAME + ".createExcelFile()...");
logger.debug("fileName: " + fileName);
logger.debug("list: " + list); FileOutputStream fileOut = null;
try {
if(StringUtil.isTrimNull(fileName)) {
return false;
} File file = new File(fileName);
if(file.exists()) {
System.out.println("文件已存在!");
logger.debug("文件已存在!");
return false;
} Workbook workbook = null;
String excelType = null;
if(FileUtil.isFileNameEndsWith(fileName, ".xls")) {
excelType = "xls";
workbook = new HSSFWorkbook();
} else if(FileUtil.isFileNameEndsWith(fileName, ".xlsx")) {
excelType = "xlsx";
workbook = new XSSFWorkbook();
} else {
return false;
} fileOut = new FileOutputStream(fileName);
workbook.write(fileOut);
fileOut.close(); FileInputStream is = new FileInputStream(file);
if("xls".equals(excelType)) {
POIFSFileSystem fs = new POIFSFileSystem(is);
workbook = new HSSFWorkbook(fs);
} else if("xlsx".equals(excelType)) {
workbook = new XSSFWorkbook(is);
} Sheet sheet = workbook.createSheet();
sheet = setSheetValue(sheet , list); fileOut = new FileOutputStream(fileName);
workbook.write(fileOut);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
logger.debug("<<<<<" + CLASSNAME + ".createExcelFile().");
return true;
}
}

【java工具类】java做的一个xml转Excel工具,基于maven工程的更多相关文章

  1. 获取Spring容器中Bean实例的工具类(Java泛型方法实现)

    在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean. 因此,实现一个获得bean实例的工具类,就很有必要. 以前,写了一个根据bean的名称和类型获取b ...

  2. JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)

    系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...

  3. 我做了一个 HTML 可视化编辑工具,有前途吗?

    疫情在家的这段时间,我做了一个 HTML 可视化编辑工具,做的时候信心满满,差不多完成了,现在反而不如以前信心足了,这玩意有用吗?代码地址: https://github.com/vularsoft/ ...

  4. java使用注解和反射打造一个简单的jdbc工具类

    a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...

  5. Redis 工具类 java 实现的redis 工具类

    最近了解了一下非关系型数据库 redis 会使用简单的命令 在自己本地电脑 使用时必须先启动服务器端 在启动客户端 redis 简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  6. 005-guava 集合-集合工具类-java.util.Collections中未包含的集合工具[Maps,Lists,Sets],Iterables、Multisets、Multimaps、Tables

    一.概述 工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和java.util.Col ...

  7. 加密解密工具类(Java,DES)

    一个Java版的DES加密工具类,能够用来进行网络传输数据加密,保存password的时候进行加密. import java.security.Key; import java.security.sp ...

  8. java工具类——java将一串数据按照gzip方式压缩和解压缩

    我要整理在工作中用到的工具类分享出来,也方便自己以后查阅使用,这些工具类都是我自己实际工作中使用的 import java.io.ByteArrayInputStream; import java.i ...

  9. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

随机推荐

  1. 常见浏览器兼容性问题与解决方案css篇

    浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大. 碰到频率:100% 解决方案:CSS里    ...

  2. [dt]世纪历史长河年代表

    年代口诀 夏商与西周, 东周分两段, 春秋和战国, 一统秦两汉, 三分魏蜀吴, 二晋前后延, 南北朝并列, 隋唐五代传, 宋元明清后, 皇朝至此完. 中国历史长河年代表 参考: 中国历史朝代顺序表.年 ...

  3. HDU1712:ACboy needs your help(分组背包模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 Problem Description ACboy has N courses this term, an ...

  4. Py-lamda表达式学习【转载】

    转自:https://blog.csdn.net/zjuxsl/article/details/79437563 1.语法定义 在Python中,lambda的语法是唯一的.其形式如下: lambda ...

  5. C#调用VP 包含素材

    VS2012 +VP9.0 ***************** 自己运行的时只要修改VP里面素材的路径即可 链接: https://pan.baidu.com/s/1J6Bc5FcBYLZLgqe30 ...

  6. c++中的构造(包括移动),赋值(包括移动),析构详解

    这五种操作:构造(包括移动),赋值(包括移动),析构其实就是定义了对一个对象进行构造,赋值,析构时的行为.理解这些行为并不复杂,复杂的是理解在继承下这些行为的表现.需要注意的是他们并不会被继承(传统意 ...

  7. phper

    0 坚持写博客,有独立的博客1 有自己的github项目,目前致力于瓦力:meolu/walle-web · GitHub,瓦尔登:meolu/walden · GitHub变得更实用,欢迎标星:)2 ...

  8. js五星好评2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 定时器事件QtimerEvent 随机数 qrand Qtimer定时器

    QTimerEvent类:定时器事件.QObject的子类都可使用  int QObject::startTimer(int interval)[参数:毫秒][返回值:定时器整型编号]来开启一个定时器 ...

  10. sift 与 surf 算法

    http://blog.csdn.net/cy513/article/details/4414352 SURF算法是SIFT算法的加速版,OpenCV的SURF算法在适中的条件下完成两幅图像中物体的匹 ...