参考链接:

程序代码:

  1. package demo;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.util.zip.ZipEntry;
  7. import java.util.zip.ZipException;
  8. import java.util.zip.ZipFile;
  9.  
  10. import javax.xml.parsers.DocumentBuilderFactory;
  11. import javax.xml.parsers.ParserConfigurationException;
  12.  
  13. import org.w3c.dom.Element;
  14. import org.w3c.dom.Document;
  15. import org.w3c.dom.NodeList;
  16. import org.xml.sax.SAXException;
  17.  
  18. public class demo {
  19.  
  20. /**
  21. * @param args
  22. */
  23. public static void main(String[] args) {
  24. // 解压Book1.xlsx
  25. ZipFile xlsxFile;
  26. try {
  27. xlsxFile = new ZipFile(new File("c:\\text1.xlsx"));
  28. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  29.  
  30. // 先读取sharedStrings.xml这个文件备用
  31. ZipEntry sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");
  32. InputStream sharedStringXMLIS = xlsxFile
  33. .getInputStream(sharedStringXML);
  34. Document sharedString;
  35. sharedString = dbf.newDocumentBuilder().parse(sharedStringXMLIS);
  36. NodeList str = sharedString.getElementsByTagName("t");
  37. String sharedStrings[] = new String[str.getLength()];
  38. for (int n = 0; n < str.getLength(); n++) {
  39. Element element = (Element) str.item(n);
  40. sharedStrings[n] = element.getTextContent();
  41. }
  42. // 找到解压文件夹里的workbook.xml,此文件中包含了这张工作表中有几个sheet
  43. ZipEntry workbookXML = xlsxFile.getEntry("xl/workbook.xml");
  44. InputStream workbookXMLIS = xlsxFile.getInputStream(workbookXML);
  45. Document doc = dbf.newDocumentBuilder().parse(workbookXMLIS);
  46. // 获取一共有几个sheet
  47. NodeList nl = doc.getElementsByTagName("sheet");
  48.  
  49. for (int i = 0; i < nl.getLength(); i++) {
  50. Element element = (Element) nl.item(i);// 将node转化为element,用来得到每个节点的属性
  51. System.out.println(element.getAttribute("name"));// 输出sheet节点的name属性的值
  52. // 接着就要到解压文件夹里找到对应的name值的xml文件,比如在workbook.xml中有<sheet name="Sheet1"
  53. // sheetId="1" r:id="rId1" /> 节点
  54. // 那么就可以在解压文件夹里的xl/worksheets下找到sheet1.xml,这个xml文件夹里就是包含的表格的内容
  55. ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/"
  56. + element.getAttribute("name").toLowerCase() + ".xml");
  57. InputStream sheetXMLIS = xlsxFile.getInputStream(sheetXML);
  58. Document sheetdoc = dbf.newDocumentBuilder().parse(sheetXMLIS);
  59. NodeList rowdata = sheetdoc.getElementsByTagName("row");
  60. for (int j = 0; j < rowdata.getLength(); j++) {
  61. // 得到每个行
  62. // 行的格式:
  63. /*
  64. * <row r="1" spans="1:3">r表示第一行,spans表示有几列 <c r="A1"
  65. * t="s">//r表示该列的列表
  66. * ,t="s"个人认为是表示这个单元格的内容可以在sharedStrings.xml这个文件里找到,对应的节点
  67. * 下标就是v节点的值,即0,若没有t属性,则v的值就是该单元格的内容 <v>0</v> </c> <c r="B1"
  68. * t="s"> <v>1</v> </c> <c r="C1" t="s"> <v>2</v> </c> </row>
  69. */
  70. Element row = (Element) rowdata.item(j);
  71. // 根据行得到每个行中的列
  72. NodeList columndata = row.getElementsByTagName("c");
  73. for (int k = 0; k < columndata.getLength(); k++) {
  74. Element column = (Element) columndata.item(k);
  75. NodeList values = column.getElementsByTagName("v");
  76. Element value = (Element) values.item(0);
  77. if (column.getAttribute("t") != null
  78. & column.getAttribute("t").equals("s")) {
  79. // 如果是共享字符串则在sharedstring.xml里查找该列的值
  80.  
  81. System.out.print(sharedStrings[Integer.parseInt(value.getTextContent())] + " ");
  82. } else {
  83. if (value != null) {
  84. System.out.print(value.getTextContent() + " ");
  85. }else {
  86. System.out.println("j : " + j + " k : " + k + " null");
  87. }
  88. }
  89. }
  90. System.out.println();
  91. }
  92. }
  93. } catch (ZipException e) {
  94. // TODO Auto-generated catch block
  95. e.printStackTrace();
  96. } catch (IOException e) {
  97. // TODO Auto-generated catch block
  98. e.printStackTrace();
  99. } catch (SAXException e) {
  100. // TODO Auto-generated catch block
  101. e.printStackTrace();
  102. } catch (ParserConfigurationException e) {
  103. // TODO Auto-generated catch block
  104. e.printStackTrace();
  105. }
  106.  
  107. }
  108.  
  109. }

通过纯Java代码从excle中读取数据(为.xlsx文件)的更多相关文章

  1. Kafka消费者 从Kafka中读取数据并写入文件

    Kafka消费者 从Kafka中读取数据 最近有需求要从kafak上消费读取实时数据,并将数据中的key输出到文件中,用于发布端的原始点进行比对,以此来确定是否传输过程中有遗漏数据. 不废话,直接上代 ...

  2. java代码和spring框架读取xml和properties文件

    1.java文件读取properties文件 Properties props = new Properties(); try { //资源文件存放在类文件的根目录下.即是放在src下面.则不需要写路 ...

  3. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  4. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  5. Android 使用纯Java代码布局

    java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...

  6. java从文件中读取数据然后插入到数据库表中

    实习工作中,完成了领导交给的任务,将搜集到的数据插入到数据库中,代码片段如下: static Connection getConnection() throws SQLException, IOExc ...

  7. 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇

    在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文 ...

  8. 在Android中用纯Java代码布局

    感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...

  9. DataX通过纯Java代码启动

    DataX是阿里巴巴团队开发的一个很好开源项目,但是他们对如何使用只提供了python命令启动方式,这种方式对于只是想简单的用下DataX的人来说很是友好,仅仅需要几行代码就可以运行,但是如果你需要在 ...

随机推荐

  1. 【cocos2d-js 3.0】制作2048

    2048:在一个4X4的方阵中,玩家需要滑动上面的数字,如果俩个数字相邻并且相等,则相加,需要达到2048,方可胜利. 因为在浏览器操作,所以此例的操作方法为:键盘上的w,s,a,d代表上下左右,也可 ...

  2. JavaScript DOM编程艺术-学习笔记(第八章、第九章)

    第八章 1.小知识点: ①某些浏览器要根据DOCTYPE 来决定页面的呈现模式(标准模式 / 怪异模式--也称兼容模式): 兼容模式意味着浏览器要模仿老一辈的浏览器的怪异行为,来让老站点得到运行,并让 ...

  3. [转]linux权限补充:rwt rwT rws rwS 特殊权限

    众所周知,Linux的文件权限如: 777:666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件.所以我们只需要将bash复制出来到另一个地方,然后用root加上U ...

  4. jquery 学习笔记(1)

    $就是jquery的一个简写形式 如$('#foo')和jQuery('#foo')是等价的,  $.ajax和  jQuery.ajax是等价的   $符号是jQuery的一个简写形式 window ...

  5. Delphi @ # $ 特殊字符含义

      ^: 指针   @: 取址  #: 十进制符   $: 十六进制符

  6. <hr/>标签改变颜色注意事项

    1.css改变颜色 <hr style="border:0;background-color:#093;height:1px;">   注意: 如果不加border:0 ...

  7. Java 集合 散列表hash table

    Java 集合 散列表hash table @author ixenos 摘要:hash table用链表数组实现.解决散列表的冲突:开放地址法 和 链地址法(冲突链表方式) hash table 是 ...

  8. [POJ] String Matching

    String Matching Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4074   Accepted: 2077 D ...

  9. ActiveMQ in Action(4) - Security

    关键字: activemq 2.4 Security    ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换.2.4.1 Simple Authentication Plug ...

  10. MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法

    发生System.Data.Entity.Validation.DbEntityValidationException这个异常的时候,如果没有用特定的异常类去捕捉,是看不到具体信息的. 通常都是用Sy ...