通过纯Java代码从excle中读取数据(为.xlsx文件)
2015-05-14 17:20
633 查看
参考链接:
程序代码:
View Code
程序代码:
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 = 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(); } } }
View Code
相关文章推荐
- JAVA代码:通过Socket读取返回的数据
- JAVA读取txt文件中数据代码范例
- java 读取txt文件中的列表数据 代码
- java用JXL读取excle文件(demo)示例代码
- 通过java程序读取文件xml中的数据
- java SDK ,上传、读取 基本类型数据通过服务器(客户端代码)
- JAVA通过Hibernate将文件写入ORACLE数据的BLOB字段 代码示例
- JAVA代码:通过Socket读取返回的数据
- 用java代码实现从excel表格读取数据然后写入生成国际化配置文件properties
- 通过java程序读取文件xml中的数据
- java通过InputStream读取和写入文件操作实例代码
- JAVA 通过poi 读取 本地excel(.xls,.xlsx)文件,文件中 包含图片
- Spring MVC中,通过Java代码读取资源文件时,发生乱码的解决方法
- java代码--通过某路径读取数据
- Java通过apache poi 读取excel(.xlsx)文件,并通过MyBbtis插入数据库中
- 【java基础:JDBC】通过读取配置文件进行数据库连接并读取数据的Demostration
- 将配置文件中的数据读取到JAVA代码中使用
- java通过url读取远程数据并保持到本地的实例代码
- java代码实现CSV文件读取、将数据拆分成多个CSV文件及数据导出到CSV文件
- java:poi读取excel文件,分xls和xlsx