java 读取xlsx

(1)导入maven

<!-- 读取excel文件 --><dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi</artifactId>    <version>3.9</version></dependency>

(2)代码
public static void main(String[] args) {    // 解压Book1.xlsx    ZipFile xlsxFile;    try {        xlsxFile = new ZipFile(new File("/Users/chengtao/downloads/教练入职时间.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");            HashMap<String, String> nameAndEntryTimeMap = new HashMap<String,String>();            for (int j = 0; j < rowdata.getLength(); j++) {                System.out.println(" 第" + 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");// 根据行得到每个行中的列

String name_Key = null;     //姓名                String time_value = null;   //入职时间                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.println(" 第" + k +"列  "+sharedStrings[Integer.parseInt(value.getTextContent())] + " ");                        if(k ==0){                            name_Key = sharedStrings[Integer.parseInt(value.getTextContent())];                        }else if(k==2){                            time_value = sharedStrings[Integer.parseInt(value.getTextContent())];                        }                    } else {                        if (value != null) {                            System.out.print(value.getTextContent() + " ");                        }else {                            System.out.println("j : " + j + "   k : " + k + "  null");                        }                    }                }                nameAndEntryTimeMap.put(name_Key, time_value);                System.out.println();            }            System.out.println(nameAndEntryTimeMap);        }    } 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();    }

}
 
时间: 2024-07-30 20:11:23

java 读取xlsx的相关文章

java读取xlsx文件的所有数据

此次demo中使用到的jar.(点击进入下载地址) java: package com.test; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apa

java 读取 xlsx

package test; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; impo

java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx

环境准备txt利用common-iopdf利用pdfbox剩下的用POI关于POI,读取xls没啥特别的,主要是读取doc和ppt,需要下载poi源代码,然后将poi-src-3.7-20101029.zip\poi-3.7\src\scratchpad\src下的所有文件copy到工程,或者自己封装个jar包jar包依赖 code如下:package test; import java.io.BufferedInputStream;import java.io.File;import java

java读取xls和xlsx数据作为数据驱动来用

java读取Excle代码 拿来可以直接使用 :针对xls 和 xlsx package dataProvider; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip 

poi读取xlsx

知道 大家都知道用poi读取xls  当时有时候 必须要读取xlsx  现在我把我做测试的demo分享给大家 package com.lt.main; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.ArrayList; im

用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)

本文通过开源pdfbox和poi进行处理多种文件格式的文本读入 1.需要的jar的maven坐标: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.2</version> </dependency> <!-- ppt,xls,docx,pptx,xlsx-->

Java读取excel表格

Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库.它包含类和方法对用户输入数据或文件到MS Office文档进行解码. Apache POI Apache POI是Apache软件基金会提供的100%开源库.大多

java读取Excel读取

java中读取Excel数据 package com.pcm.chni.equipment.frame; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.text.SimpleDateFormat; import java.util.