* 首先介绍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();

JAVA 的读取Excel方法_纯Java的方式读取excel2007相关推荐

  1. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  2. java word 读取excel数据_在Java中实现读写操作Word、Excel等文件

    Jakarta的POI项目提供了一组操纵Windows文档的Java API,如下几个类提供了操作Excel文件的方便的途径:HSSFWorkbook.HSSFSheet.HSSFRow.HSSFCe ...

  3. java ee 的使用方法_改善Java EE生产支持技能的8种方法

    java ee 的使用方法 参与Java EE生产支持的每个人都知道这项工作可能很困难. 7/24寻呼机支持,多个事件和错误修复(要定期处理),来自客户和管理团队的压力,要求它们尽快解决生产问题并防止 ...

  4. java版安卓按键精灵_纯Java实现跨平台鼠标键盘模拟、找图找色,Java版按键精灵...

    由原本的Java使用JNI调用dll实现模拟辅助操作,升级到纯Java来实现,最新:https://github.com/xnx3/xnx3 仙人辅助_寻仙自动打怪 /** * 鼠标.键盘.延迟等基本 ...

  5. java中日期比较方法_在java中进行日期时间比较的4种方法

    1. Date.compareTo() java.util.Date 提供了在 Java 中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数 ...

  6. java 消除魔鬼数字方法_消除Java详细信息的简便方法

    存档日期:2019年5月14日 | 首次发布:2010年2月16日 Lombok是一个Java™实用程序,使您可以消除Java详细信息,特别是对于普通的旧Java对象(PO​​JO). 它通过使用注释 ...

  7. java中读取excel数据类型_在Java中读取Excel文件的内容

    利用JExcelApi来动态生成excel文档 首先,请到http://www.andykhan.com/jexcelapi/index.html下载java excel api,主页上同时有比较详细 ...

  8. java读取excel日期_在JAVA读取Excel数据的日期格式

    在ExcelReader类中.getStringCellValue()方法里: public static String getStringCellValue(Cell cell) { if(cell ...

  9. java进程里面调用方法_在java里面调用CUI程序的方法

    在java里面调用CUI程序的方法推荐查看本文HTML版本 在java里面调用CUI程序的方法 问题描述: 该函数在win平台上面调用不是很成功,GUI会可以调出来,但可能和屏蔽调其中的一些用 ...

最新文章

  1. Jackson注解学习参考
  2. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数
  3. 你有一笔新订单 语音_上市即成爆款 哪吒V首日订单突破1200辆_搜狐汽车
  4. (Matrix3D)坑爹的flash帮助文档
  5. Chrome 浏览器扩展 - Night Eye
  6. 2021年9月24日和学生隆兴的学术讨论
  7. 百度声明:从未答应屏蔽三鹿负面
  8. golang文件夹位置判断
  9. 使用DBUnit集成Spring简化测试
  10. 你真的理解反向传播吗?面试必备
  11. 苹果手机夜间模式怎么设置_微信怎么设置夜间模式?iPhone夜间模式设置教程 省电又护眼!...
  12. Spring的bean管理(xml方式)之Bean实例化的方式
  13. android百度地图调用,Android 调用百度地图API
  14. 如何关闭方正软件保护卡
  15. 关于LNK2005的错误
  16. 【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
  17. makefile(9) : fatal error U1052: 未找到文件Win32.Mak
  18. 4、概率中的独立性和互斥性
  19. 科普 | 抖音服务器带宽有多大,为什么能够供那么多人同时刷?
  20. Delphi的线程类

热门文章

  1. html5 video js控制摄像头的焦距,html 通过input video canvas 打开摄像头 定制相机
  2. 安卓 无权限 访问_U盘提示无权限访问怎么办 电脑U盘访问权限管理
  3. SQL语言之DQL语言学习(十)子查询
  4. CTF-不一样的凯撒密码
  5. linux搭建directx环境,微軟開始在WSL 2環境中的Linux支援DirectX
  6. linux vino vnc,CentOS 远程桌面(vnc,vino)
  7. linux启动数据库orl,linux5.4下oracle问题
  8. linux怎么连续退回上次目录?cd - 只能在两个目录间来回切换(autojump)(pushd popd dirs)
  9. python PyQt5 QLabel()(可以用来显示文字、图片或作为放置一些控件提示信息的容器)
  10. 放置奇兵 算法 月度活动 破碎时空记录 第五关 丁丁(瓦伦丁)+杰赫拉