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

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

doc4j的maven依赖

  1. <!--xml解析的dom4j-->
  2. <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
  3. <dependency>
  4. <groupId>dom4j</groupId>
  5. <artifactId>dom4j</artifactId>
  6. <version>1.6.1</version>
  7. </dependency>

主要代码

  1. package com.xiaostudy.util;
  2.  
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentException;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.SAXReader;
  7.  
  8. import java.io.File;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. /**
  13. * XML工具类
  14. * @author xiaostudy
  15. * @date 2019.4.26
  16. * @version 1.0.0
  17. */
  18. public class XmlUtil {
  19.  
  20. public static void main(String[] args) {
  21. Boolean aBoolean = Xml2ExcelFile("C:\\Users\\Administrator\\Desktop\\test.xml", "C:\\Users\\Administrator\\Desktop\\test2.xlsx");
  22. System.out.println(aBoolean);
  23. }
  24.  
  25. /**
  26. * Xml转Excel文件
  27. * @param strXmlFilePath Xml文件路径
  28. * @param strExcleFilePath Excel文件存放路径
  29. * @return
  30. */
  31. public static Boolean Xml2ExcelFile(String strXmlFilePath, String strExcleFilePath) {
  32. if(StringUtil.isTrimNull(strXmlFilePath) || StringUtil.isTrimNull(strExcleFilePath)) {
  33. return false;
  34. }
  35.  
  36. List<List<String>> listList = readXml(strXmlFilePath);
  37. if(null == listList || listList.isEmpty()) {
  38. return false;
  39. }
  40.  
  41. return ExcelUtil.createExcelFile(strExcleFilePath, listList);
  42. }
  43.  
  44. /**
  45. * 读取Xml文件,以List<List<String>>形式返回
  46. * @param strFile
  47. * @return
  48. */
  49. public static List<List<String>> readXml(String strFile) {
  50. if(StringUtil.isTrimNull(strFile)) {
  51. return null;
  52. }
  53.  
  54. SAXReader reader = new SAXReader();
  55. File file = new File(strFile);
  56. if(!file.exists() || !file.isFile()) {
  57. return null;
  58. }
  59.  
  60. Document document = null;
  61. try {
  62. document = reader.read(file);
  63. } catch (DocumentException e) {
  64. e.printStackTrace();
  65. }
  66. List<List<String>> listList = new ArrayList<>();
  67.  
  68. if (null != document) {
  69. Element root = document.getRootElement();
  70. List<Element> childElements = root.elements();
  71. List<String> titleList = new ArrayList<>();
  72. listList.add(titleList);
  73. boolean flag = true;
  74. for (Element child : childElements) {
  75. List<String> list = new ArrayList<>();
  76.  
  77. List<Element> elementList = child.elements();
  78. for (Element ele : elementList) {
  79. if(flag) {
  80. titleList.add(ele.getName());
  81. }
  82. list.add(ele.getText());
  83. }
  84. flag = false;
  85.  
  86. listList.add(list);
  87.  
  88. System.out.println();
  89. }
  90. }
  91.  
  92. return listList;
  93. }
  94. }

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

StringUtil.isTrimNull

  1. public static boolean isTrimNull(Object obj) {
  2. if (null != obj) {
  3. return isNull(obj.toString().trim());
  4. } else {
  5. return true;
  6. }
  7. }

Excel.createExcelFile

  1. public static <T> Boolean createExcelFile(String fileName, List<List<T>> list) {
  2. logger.debug(">>>>>" + CLASSNAME + ".createExcelFile()...");
  3. logger.debug("fileName: " + fileName);
  4. logger.debug("list: " + list);
  5.  
  6. FileOutputStream fileOut = null;
  7. try {
  8. if(StringUtil.isTrimNull(fileName)) {
  9. return false;
  10. }
  11.  
  12. File file = new File(fileName);
  13. if(file.exists()) {
  14. System.out.println("文件已存在!");
  15. logger.debug("文件已存在!");
  16. return false;
  17. }
  18.  
  19. Workbook workbook = null;
  20. String excelType = null;
  21. if(FileUtil.isFileNameEndsWith(fileName, ".xls")) {
  22. excelType = "xls";
  23. workbook = new HSSFWorkbook();
  24. } else if(FileUtil.isFileNameEndsWith(fileName, ".xlsx")) {
  25. excelType = "xlsx";
  26. workbook = new XSSFWorkbook();
  27. } else {
  28. return false;
  29. }
  30.  
  31. fileOut = new FileOutputStream(fileName);
  32. workbook.write(fileOut);
  33. fileOut.close();
  34.  
  35. FileInputStream is = new FileInputStream(file);
  36. if("xls".equals(excelType)) {
  37. POIFSFileSystem fs = new POIFSFileSystem(is);
  38. workbook = new HSSFWorkbook(fs);
  39. } else if("xlsx".equals(excelType)) {
  40. workbook = new XSSFWorkbook(is);
  41. }
  42.  
  43. Sheet sheet = workbook.createSheet();
  44. sheet = setSheetValue(sheet , list);
  45.  
  46. fileOut = new FileOutputStream(fileName);
  47. workbook.write(fileOut);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. } finally {
  51. if(fileOut != null) {
  52. try {
  53. fileOut.close();
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. logger.debug("<<<<<" + CLASSNAME + ".createExcelFile().");
  59. return true;
  60. }
  61. }

【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. 一起做RGB-D SLAM (2)

    第二讲 从图像到点云 本讲中,我们将带领读者,编写一个将图像转换为点云的程序.该程序是后期处理地图的基础.最简单的点云地图即是把不同位置的点云进行拼接得到的. 当我们使用RGB-D相机时,会从相机里读 ...

  2. 谷歌浏览器:audio如何隐藏下载按钮

    当我们使用原生的audio标签时,可以看到如下的效果. 那么如何让下载按钮隐藏掉呢? 1. controlsList="nodownload" // 这个方法只支持 Chrome ...

  3. Android中Activity的四种开发模式

    Activity的四种启动模式:standard.singleTop.singleTask.singleInstance   清单文件中的Activity配置使用:android:launchMode ...

  4. Q_UNUSED

    Q_UNUSED() 没有实质性的作用,用来避免编译器警告 void func( int a) { Q_UNUSED(a); //函数体内没有使用a,避免编译器警告 }

  5. Integer类之equals与hashCode

    一.源码. 1.equals源码.可以看出,比较的是两者的类型相同且内容相同.即是否有相等的int类型的value值. ######################################## ...

  6. 网站建设中常用的JS代码段落

    1.屏蔽左右键 这个不介绍了. <script language="JavaScript"> document.oncontextmenu=new Function(& ...

  7. UVA10066

    /* 最长公共子序列 */ #include <cstdio> #include <string.h> #include <iostream> const int ...

  8. 在HTML中实现和使用遮罩层

    Web页面中使用遮罩层,可防止重复操作,提示loading:也可以模拟弹出模态窗口. 实现思路:一个DIV作为遮罩层,一个DIV显示loading动态GIF图片.在下面的示例代码中,同时展示了如何在i ...

  9. hive 配置参数说明(收藏版)

    问题导读: 如何设置reduce的个数? Hive 默认的数据文件存储路径? Hive 默认的输出文件格式? 是否开启 map/reduce job的并发提交? 所允许的最大的动态分区的个数? hiv ...

  10. Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!

    Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!找到你自己感兴趣的点进行切入,并找到兴趣点进行自我驱动是最好的学习方式!       推荐两本书,一本作为 ...