java实现excel文件转换为xml文件
2019-01-21 02:40:59来源:博客园 阅读 ()
一、导包:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1.3</version>
</dependency>
二、代码部分:
public class AnalysisEtoX { public static void main(String[] args) { try { System.out.println("============="); // 用输入流从本地拿到对应的Excel文件 InputStream stream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\试题.xlsx"); // 指定要生成的xml的路径,并构建文件对象 File f = new File("test.xml");// 新建个file对象把解析之后得到的xml存入改文件中 writerXML(stream, f);// 将数据以xml形式写入文本 } catch (FileNotFoundException e) { System.out.println("未找到指定路径的文件!"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void writerXML(InputStream stream, File f) throws IOException { System.out.println("into writerXML"); FileOutputStream fo = new FileOutputStream(f);// 得到输入流 Document doc = readExcell(stream);// 读取EXCEL函数 Format format = Format.getCompactFormat().setEncoding("UTF-8").setIndent(""); XMLOutputter XMLOut = new XMLOutputter(format);// 在元素后换行,每一层元素缩排四格 XMLOut.output(doc, fo); fo.close(); } private static Document readExcell(InputStream stream) { System.out.println("into readExcell"); // 设置根<tax_institutions></tax_institutions>元素 Element root = new Element("tax_institutions"); Document doc = new Document(root); try { HSSFWorkbook hw = new HSSFWorkbook(stream); // 获取工作薄的个数,即一个excel文件中包含了多少个Sheet工作簿 int WbLength = hw.getNumberOfSheets(); System.out.println("WbLength=" + WbLength); for (int i = 0; i < WbLength; i++) { HSSFSheet shee = hw.getSheetAt(i); int length = shee.getLastRowNum(); System.out.println("行数:" + length); for (int j = 1; j <= length; j++) { HSSFRow row = shee.getRow(j); if (row == null) { continue; } int cellNum = row.getPhysicalNumberOfCells();// 获取一行中最后一个单元格的位置 System.out.println("列数cellNum:" + cellNum); Element e = null; // 设置根元素下的并列元素<tax_institution></tax_institution> e = new Element("tax_institution"); // Element[] es = new Element[16]; for (int k = 0; k < cellNum; k++) { HSSFCell cell = row.getCell((short) k); String temp = get(k); System.out.print(k + " " + temp + ":"); Element item = new Element(temp); if (cell == null) { item.setText(""); e.addContent(item); cellNum++;// 如果存在空列,那么cellNum增加1,这一步很重要。 continue; } else { String cellvalue = ""; switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是Date类型则,转化为Data格式 // 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00 // cellvalue = cell.getDateCellValue().toLocaleString(); // 方法2:这样子的data格式是不带带时分秒的:2011-10-12 Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); cellvalue = sdf.format(date); item.setText(cellvalue); } // 如果是纯数字 else { // 取得当前Cell的数值 cellvalue = String.valueOf((int) cell.getNumericCellValue()); item.setText(cellvalue); } break; } // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); item.setText(cellvalue); break; // 默认的Cell值 default: cellvalue = " "; item.setText(cellvalue); } e.addContent(item); System.out.println(cellvalue); } } root.addContent(e); } } } catch (Exception e) { e.printStackTrace(); } finally { try { stream.close(); } catch (IOException e1) { e1.printStackTrace(); } } return doc; } // 设置并列元素里的子元素名 private static String get(int k) { String test = ""; switch (k) { case 0: test = "org_name"; break; case 1: test = "legal_mobile_phone"; break; case 2: test = "org_address"; break; case 3: test = "cert_type"; break; case 4: test = "postal_code"; break; case 5: test = "reg_sum"; break; case 6: test = "business_scope"; break; case 7: test = "social_credit_code"; break; case 8: test = "reg_type"; break; case 9: test = "legal_person_name"; break; case 10: test = "cert_number"; break; case 11: test = "found_time"; break; case 12: test = "service_status"; break; case 13: test = "staff_sum"; break; case 14: test = "partner_sum"; break; case 15: test = "is_branch_org"; break; default: } return test; } }
转载地址csdn:https://blog.csdn.net/weixin_40420734/article/details/79538772
注意:
excel版本保存文件的后缀名问题,如果是.xls,使用HSSFWorkbook;如果是xlsx,使用XSSFWorkbook。
版本错误会抛出OfficeXmlFileException!!!
原文链接:https://www.cnblogs.com/Pamper-Chen/p/10291004.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash