JAVA 的读取Excel方法_纯Java的方式读取excel2007

这篇博客详细介绍了如何使用Java解析Excel2007的.xlsx文件,通过解压缩文件并读取sharedStrings.xml、styles.xml和workbook.xml等关键文件来获取工作表信息。博客内容涵盖了工作表的结构、共享字符串、样式以及行和列的数据读取方法,为理解.xlsx文件格式提供了清晰的指导。
摘要由CSDN通过智能技术生成

* 首先介绍excel2007文件的格式,这里单只工作表文件,不包括加载宏的以及其他格式的,即.xlsx扩展名的

* 你可以把Book1.xlsx这个文件用解压缩文件打开,这是office2007的新格式,所有的该版本的文件都可以用

* 解压缩文件打开。

* 在解压到的文件夹里主要用到的是xl这个文件夹,这里也只介绍这个文件夹里的部分文件,其他信息可以在微软

* 的msdn上找到。

*

xl文件夹下有sharedStrings.xml,styles.xml,workbook.xml三个文件,第一个是放共享字符的,在msdn上说

*

在这里可以定义各种语言的字符,然后在sheet.xml里引用这个来达到国际化,而不用为每种语言建立一个excel,styles

* 可能是样式吧,workbook.xml是表的总体情况,有几个sheet等等。

*

接着是该文件夹下的worksheets文件夹,里面放的是每个sheet的具体内容,比如在workbook.xml定义有3个sheet,那么

* 在这里你就能看到三个文件,文件名对应workbook.xml中sheet节点的name属性,但是这里要注意大小写

* 打开一个sheet1.xml文件,可以看到这里定义了该sheet中的行和列的信息,具体在程序里有介绍。

* 读取简单的工作表文件的内容基本上用到这些,如果还要对文件进行操作的话,可能还可以修改字体,样式什么的。

*

import java.io.File;

import java.io.InputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class ReadExcel2007 {

public static void main(String[] args){

try{

//解压Book1.xlsx

ZipFile

xlsxFile =new ZipFile(new File("c:\\l_f3.201004.xlsx"));

DocumentBuilderFactory

dbf = DocumentBuilderFactory.newInstance();

//先读取sharedStrings.xml这个文件备用

ZipEntry

sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");

InputStream

sharedStringXMLIS = xlsxFile.getInputStream(sharedStringXML);

Document

sharedString

= (Document)

dbf.newDocumentBuilder().parse(sharedStringXMLIS);

NodeList

str=((org.w3c.dom.Document)

sharedString).getElementsByTagName_r("t");

String

sharedStrings[]=new String[str.getLength()];

for(int

n=0;n

Element element=(Element)str.item(n);

//System.out.println(element.getTextContent());

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_r("sheet");

for(int

i=0;i

Element element=(Element)nl.item(i);//将node转化为element,用来得到每个节点的属性

System.out.println(element.getAttribute("name"));//输出sheet节点的name属性的值

//接着就要到解压文件夹里找到对应的name值的xml文件,比如在workbook.xml中有

name="Sheet1" sheetId="1" r:id="rId1" /> 节点

//那么就可以在解压文件夹里的xl/worksheets下找到sheet1.xml,这个xml文件夹里就是包含的表格的内容 ZipEntry

sheetXML=xlsxFile.getEntry("xl/worksheets/sheet"+element.getAttribute("sheetId").toLowerCase()+".xml");

InputStream sheetXMLIS=xlsxFile.getInputStream(sheetXML);

Document sheetdoc

= dbf.newDocumentBuilder().parse(sheetXMLIS);

NodeList rowdata=sheetdoc.getElementsByTagName_r("row");

for(int j=0;j

//得到每个行

//行的格式: Element row=(Element)rowdata.item(j);

//根据行得到每个行中的列 NodeList columndata=row.getElementsByTagName_r("c");

for(int k=0;k

Element column=(Element)columndata.item(k);

NodeList values=column.getElementsByTagName_r("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{

System.out.print(value.getTextContent()+" ");

}

}

System.out.println();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值