通过纯Java代码从excle中读取数据(为.xlsx文件)
参考链接:
程序代码:
- package demo;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipException;
- import java.util.zip.ZipFile;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.w3c.dom.Element;
- import org.w3c.dom.Document;
- import org.w3c.dom.NodeList;
- import org.xml.sax.SAXException;
- public class demo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 解压Book1.xlsx
- ZipFile xlsxFile;
- try {
- xlsxFile = new ZipFile(new File("c:\\text1.xlsx"));
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- // 先读取sharedStrings.xml这个文件备用
- ZipEntry sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");
- InputStream sharedStringXMLIS = xlsxFile
- .getInputStream(sharedStringXML);
- Document sharedString;
- sharedString = dbf.newDocumentBuilder().parse(sharedStringXMLIS);
- NodeList str = sharedString.getElementsByTagName("t");
- String sharedStrings[] = new String[str.getLength()];
- for (int n = 0; n < str.getLength(); n++) {
- Element element = (Element) str.item(n);
- sharedStrings[n] = element.getTextContent();
- }
- // 找到解压文件夹里的workbook.xml,此文件中包含了这张工作表中有几个sheet
- ZipEntry workbookXML = xlsxFile.getEntry("xl/workbook.xml");
- InputStream workbookXMLIS = xlsxFile.getInputStream(workbookXML);
- Document doc = dbf.newDocumentBuilder().parse(workbookXMLIS);
- // 获取一共有几个sheet
- NodeList nl = doc.getElementsByTagName("sheet");
- for (int i = 0; i < nl.getLength(); i++) {
- Element element = (Element) nl.item(i);// 将node转化为element,用来得到每个节点的属性
- System.out.println(element.getAttribute("name"));// 输出sheet节点的name属性的值
- // 接着就要到解压文件夹里找到对应的name值的xml文件,比如在workbook.xml中有<sheet name="Sheet1"
- // sheetId="1" r:id="rId1" /> 节点
- // 那么就可以在解压文件夹里的xl/worksheets下找到sheet1.xml,这个xml文件夹里就是包含的表格的内容
- ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/"
- + element.getAttribute("name").toLowerCase() + ".xml");
- InputStream sheetXMLIS = xlsxFile.getInputStream(sheetXML);
- Document sheetdoc = dbf.newDocumentBuilder().parse(sheetXMLIS);
- NodeList rowdata = sheetdoc.getElementsByTagName("row");
- for (int j = 0; j < rowdata.getLength(); j++) {
- // 得到每个行
- // 行的格式:
- /*
- * <row r="1" spans="1:3">r表示第一行,spans表示有几列 <c r="A1"
- * t="s">//r表示该列的列表
- * ,t="s"个人认为是表示这个单元格的内容可以在sharedStrings.xml这个文件里找到,对应的节点
- * 下标就是v节点的值,即0,若没有t属性,则v的值就是该单元格的内容 <v>0</v> </c> <c r="B1"
- * t="s"> <v>1</v> </c> <c r="C1" t="s"> <v>2</v> </c> </row>
- */
- Element row = (Element) rowdata.item(j);
- // 根据行得到每个行中的列
- NodeList columndata = row.getElementsByTagName("c");
- for (int k = 0; k < columndata.getLength(); k++) {
- Element column = (Element) columndata.item(k);
- NodeList values = column.getElementsByTagName("v");
- Element value = (Element) values.item(0);
- if (column.getAttribute("t") != null
- & column.getAttribute("t").equals("s")) {
- // 如果是共享字符串则在sharedstring.xml里查找该列的值
- System.out.print(sharedStrings[Integer.parseInt(value.getTextContent())] + " ");
- } else {
- if (value != null) {
- System.out.print(value.getTextContent() + " ");
- }else {
- System.out.println("j : " + j + " k : " + k + " null");
- }
- }
- }
- System.out.println();
- }
- }
- } catch (ZipException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
通过纯Java代码从excle中读取数据(为.xlsx文件)的更多相关文章
- Kafka消费者 从Kafka中读取数据并写入文件
Kafka消费者 从Kafka中读取数据 最近有需求要从kafak上消费读取实时数据,并将数据中的key输出到文件中,用于发布端的原始点进行比对,以此来确定是否传输过程中有遗漏数据. 不废话,直接上代 ...
- java代码和spring框架读取xml和properties文件
1.java文件读取properties文件 Properties props = new Properties(); try { //资源文件存放在类文件的根目录下.即是放在src下面.则不需要写路 ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- (转)java 从jar包中读取资源文件
(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...
- Android 使用纯Java代码布局
java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...
- java从文件中读取数据然后插入到数据库表中
实习工作中,完成了领导交给的任务,将搜集到的数据插入到数据库中,代码片段如下: static Connection getConnection() throws SQLException, IOExc ...
- 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇
在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文 ...
- 在Android中用纯Java代码布局
感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...
- DataX通过纯Java代码启动
DataX是阿里巴巴团队开发的一个很好开源项目,但是他们对如何使用只提供了python命令启动方式,这种方式对于只是想简单的用下DataX的人来说很是友好,仅仅需要几行代码就可以运行,但是如果你需要在 ...
随机推荐
- 【cocos2d-js 3.0】制作2048
2048:在一个4X4的方阵中,玩家需要滑动上面的数字,如果俩个数字相邻并且相等,则相加,需要达到2048,方可胜利. 因为在浏览器操作,所以此例的操作方法为:键盘上的w,s,a,d代表上下左右,也可 ...
- JavaScript DOM编程艺术-学习笔记(第八章、第九章)
第八章 1.小知识点: ①某些浏览器要根据DOCTYPE 来决定页面的呈现模式(标准模式 / 怪异模式--也称兼容模式): 兼容模式意味着浏览器要模仿老一辈的浏览器的怪异行为,来让老站点得到运行,并让 ...
- [转]linux权限补充:rwt rwT rws rwS 特殊权限
众所周知,Linux的文件权限如: 777:666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件.所以我们只需要将bash复制出来到另一个地方,然后用root加上U ...
- jquery 学习笔记(1)
$就是jquery的一个简写形式 如$('#foo')和jQuery('#foo')是等价的, $.ajax和 jQuery.ajax是等价的 $符号是jQuery的一个简写形式 window ...
- Delphi @ # $ 特殊字符含义
^: 指针 @: 取址 #: 十进制符 $: 十六进制符
- <hr/>标签改变颜色注意事项
1.css改变颜色 <hr style="border:0;background-color:#093;height:1px;"> 注意: 如果不加border:0 ...
- Java 集合 散列表hash table
Java 集合 散列表hash table @author ixenos 摘要:hash table用链表数组实现.解决散列表的冲突:开放地址法 和 链地址法(冲突链表方式) hash table 是 ...
- [POJ] String Matching
String Matching Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4074 Accepted: 2077 D ...
- ActiveMQ in Action(4) - Security
关键字: activemq 2.4 Security ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换.2.4.1 Simple Authentication Plug ...
- MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法
发生System.Data.Entity.Validation.DbEntityValidationException这个异常的时候,如果没有用特定的异常类去捕捉,是看不到具体信息的. 通常都是用Sy ...