http://fengsky491.iteye.com/blog/537458

环境和所需包:

1,JDK1.5

2,poi-3.5-FINAL-20090928.jar,

poi-contrib-3.5-FINAL-20090928.jar,

poi-ooxml-3.5-FINAL-20090928.jar,

poi-scratchpad-3.5-FINAL-20090928.jar,

log4j-1.2.13.jar,

commons-logging-1.1.jar,

junit-3.8.1.jar,

dom4j-1.6.1.jar,

geronimo-stax-api_1.0_spec-1.0.jar,

ooxml-schemas-1.0.jar,

xmlbeans-2.3.0.jar

注意 :

1,可能有些包不需要,没有测试,因为有些包项目中已经存在了

2,我开始少了最后2个包,报:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException

Java代码:

Java代码  
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.InputStream;
  4. import org.apache.poi.hssf.usermodel.HSSFDateUtil;
  5. import org.apache.poi.xssf.usermodel.XSSFCell;
  6. import org.apache.poi.xssf.usermodel.XSSFRow;
  7. import org.apache.poi.xssf.usermodel.XSSFSheet;
  8. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  9. public class POIExcelDemo {
  10. public static void read(String fileName) throws Exception {
  11. XSSFWorkbook wb = new XSSFWorkbook(fileName);
  12. read(wb);
  13. }
  14. public static void read(InputStream is) throws Exception {
  15. XSSFWorkbook wb = new XSSFWorkbook(is);
  16. read(wb);
  17. }
  18. public static void read(XSSFWorkbook xwb) throws Exception {
  19. try {
  20. for (int k = 0; k < xwb.getNumberOfSheets(); k++) {
  21. XSSFSheet sheet = xwb.getSheetAt(k);
  22. int rows = sheet.getPhysicalNumberOfRows();
  23. for (int r = 0; r < rows; r++) {
  24. // 定义 row
  25. XSSFRow row = sheet.getRow(r);
  26. if (row != null) {
  27. int cells = row.getPhysicalNumberOfCells();
  28. for (short c = 0; c < cells; c++) {
  29. XSSFCell cell = row.getCell(c);
  30. if (cell != null) {
  31. String value = null;
  32. switch (cell.getCellType()) {
  33. case XSSFCell.CELL_TYPE_FORMULA:
  34. value = "FORMULA ";
  35. break;
  36. case XSSFCell.CELL_TYPE_NUMERIC:
  37. if(HSSFDateUtil.isCellDateFormatted(cell)){
  38. value = "DATE value="
  39. + cell.getDateCellValue();
  40. }else{
  41. value = "NUMERIC value="
  42. + cell.getNumericCellValue();
  43. }
  44. break;
  45. case XSSFCell.CELL_TYPE_STRING:
  46. value = "STRING value="
  47. + cell.getStringCellValue();
  48. break;
  49. case XSSFCell.CELL_TYPE_BOOLEAN:
  50. value = "BOOLEAN value="
  51. + cell.getBooleanCellValue();
  52. cell.getDateCellValue();
  53. break;
  54. default:
  55. }
  56. System.out.println(value);
  57. }
  58. }
  59. }
  60. }
  61. }
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. /**
  67. * @param args
  68. * @throws Exception
  69. */
  70. public static void main(String[] args) throws Exception {
  71. // TODO Auto-generated method stub
  72. File f = new File("d:/Test.xlsx");
  73. FileInputStream is = new FileInputStream(f);
  74. System.out.println(f.getName());
  75. read(is);
  76. }
  77. }
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class POIExcelDemo {
public static void read(String fileName) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook(fileName);
read(wb);
}
public static void read(InputStream is) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook(is);
read(wb);
}
public static void read(XSSFWorkbook xwb) throws Exception {
try {
for (int k = 0; k < xwb.getNumberOfSheets(); k++) {
XSSFSheet sheet = xwb.getSheetAt(k);
int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) {
// 定义 row
XSSFRow row = sheet.getRow(r);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
for (short c = 0; c < cells; c++) {
XSSFCell cell = row.getCell(c);
if (cell != null) {
String value = null;
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA ";
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
value = "DATE value="
+ cell.getDateCellValue();
}else{
value = "NUMERIC value="
+ cell.getNumericCellValue();
}
break;
case XSSFCell.CELL_TYPE_STRING:
value = "STRING value="
+ cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = "BOOLEAN value="
+ cell.getBooleanCellValue();
cell.getDateCellValue();
break;
default:
}
System.out.println(value);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("d:/Test.xlsx");
FileInputStream is = new FileInputStream(f);
System.out.println(f.getName());
read(is);
}
}

写完之后完把文件改成读取test.xls(Excel2003),发现出现Exception in thread "main" org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'C:\DOCUME~1\CHENXI~1\LOCALS~1\Temp\poifiles\poi-ooxml-1966473540.tmp'
    at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:102)

所以为了兼容读取2003,我把代码给成如下:

Java代码  
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.InputStream;
  4. import org.apache.poi.hssf.usermodel.HSSFDateUtil;
  5. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  6. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  7. import org.apache.poi.ss.usermodel.Cell;
  8. import org.apache.poi.ss.usermodel.Row;
  9. import org.apache.poi.ss.usermodel.Sheet;
  10. import org.apache.poi.ss.usermodel.Workbook;
  11. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  12. public class POIExcelDemo {
  13. /**
  14. *
  15. * @param fileName 文件路径
  16. * @param flag 是2003还是2007 true:2003,false:2007
  17. * @throws Exception
  18. */
  19. public static void read(String fileName,boolean flag) throws Exception {
  20. Workbook wb = null;
  21. if(flag){//2003
  22. File f = new File(fileName);
  23. FileInputStream is = new FileInputStream(f);
  24. POIFSFileSystem fs = new POIFSFileSystem(is);
  25. wb = new HSSFWorkbook(fs);
  26. is.close();
  27. }else{//2007
  28. wb = new XSSFWorkbook(fileName);
  29. }
  30. read(wb);
  31. }
  32. /**
  33. *
  34. * @param is 输入流
  35. * @param flag 是2003还是2007 true:2003,false:2007
  36. * @throws Exception
  37. */
  38. public static void read(InputStream is,boolean flag) throws Exception {
  39. Workbook wb = null;
  40. if(flag){//2003
  41. wb = new HSSFWorkbook(is);
  42. }else{//2007
  43. wb = new XSSFWorkbook(is);
  44. }
  45. read(wb);
  46. }
  47. /**
  48. * 具体读取Excel
  49. * @param wb
  50. * @throws Exception
  51. */
  52. public static void read(Workbook wb) throws Exception {
  53. try {
  54. for (int k = 0; k < wb.getNumberOfSheets(); k++) {
  55. //sheet
  56. Sheet sheet = wb.getSheetAt(k);
  57. int rows = sheet.getPhysicalNumberOfRows();
  58. for (int r = 0; r < rows; r++) {
  59. // 定义 row
  60. Row row = sheet.getRow(r);
  61. if (row != null) {
  62. int cells = row.getPhysicalNumberOfCells();
  63. for (short c = 0; c < cells; c++) {
  64. Cell cell = row.getCell(c);
  65. if (cell != null) {
  66. String value = null;
  67. switch (cell.getCellType()) {
  68. case Cell.CELL_TYPE_FORMULA:
  69. value = "FORMULA value=" + cell.getCellFormula();
  70. break;
  71. case Cell.CELL_TYPE_NUMERIC:
  72. if(HSSFDateUtil.isCellDateFormatted(cell)){
  73. value = "DATE value="
  74. + cell.getDateCellValue();
  75. }else{
  76. value = "NUMERIC value="
  77. + cell.getNumericCellValue();
  78. }
  79. break;
  80. case Cell.CELL_TYPE_STRING:
  81. value = "STRING value="
  82. + cell.getStringCellValue();
  83. break;
  84. case Cell.CELL_TYPE_BOOLEAN:
  85. value = "BOOLEAN value="
  86. + cell.getBooleanCellValue();
  87. cell.getDateCellValue();
  88. break;
  89. default:
  90. }
  91. System.out.println(value);
  92. }
  93. }
  94. }
  95. }
  96. }
  97. } catch (Exception e) {
  98. e.printStackTrace();
  99. }
  100. }
  101. /**
  102. * @param args
  103. * @throws Exception
  104. */
  105. public static void main(String[] args) throws Exception {
  106. // TODO Auto-generated method stub
  107. File f = new File("d:/test.xlsx");
  108. FileInputStream is = new FileInputStream(f);
  109. System.out.println(f.getName());
  110. read(is,false);
  111. }
  112. }

org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file相关推荐

  1. poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

    导入excel文件POI解析 时报错: FileInputStream file = new FileInputStream(new File("G:\\TestData\\test.xls ...

  2. 【Apache POI】Java 读取Excel文件

    Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...

  3. Apache POI操作Excel的坑

    本文记录一下用Apache POI操作Excel时可能遇到一些坑. excel版本错误 首先是excel版本问题,由于office excel 03版和07版的区别,在读取文件时如果版本不匹配会报以下 ...

  4. java解析xlsb文件_读取XLSB文件Apache POI的异常java.io.CharConversionException

    我正在开发一种使用Apache POI读取excel xlsb文件的Java应用程序,但是在读取时出现异常,我的代码如下: import java.io.IOException; import jav ...

  5. java eventusermodel_异常读取XLSB文件Apache POI java.io.CharConversionException

    我正在开发一个使用Apache POI读取excel xlsb文件的 Java应用程序,但是在读取它时遇到异常,我的代码如下: import java.io.IOException; import j ...

  6. POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log

    场景 SpringBoot中使用POI实现Excel导入到数据库(图文教程已实践) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. apache poi 修改docx表格_一个excel(20M)就能干趴你的poi,你信吗(附源码)?

    点击上方"阿拉奇学Java",选择"置顶或者星标" 优质文章第一时间送达! 链接: www.cnblogs.com/rongdi/p/11872810.html ...

  8. 获取excel名称java_使用Apache POI获取大型Excel文件的Excel工作表名称

    小编典典 为了显示@Gagravarr的评论可能意味着什么: 该XSSFReader包含方法XSSFReader.getSheetsData其中"返回一个迭代器,这将让你在把所有的不同的表, ...

  9. apache poi 修改docx表格_JAVA poi对word.docx文件的修改

    之前老用poi处理excel,近期看了一下处理word,同时也学习了一下,根据网上的资料写了一个读取word.docx 文档并在word中加入自定义的文本以及图片. 其中poi中有2中word的处理一 ...

最新文章

  1. mysql 缓存怎么设置_mysql中缓存如何设置
  2. Linux数据报文接收发送总结3
  3. tftp环境搭建笔记
  4. 转载的SSO文章,很基础
  5. RUP大讲堂(第三讲):如何建立软件产品的愿景
  6. 微软 HoloLens 2 正式登场!让你看看什么叫真正的黑科技
  7. mysql查询当天数据(上周、本月、上个月、距离当前现在6个月的数据)
  8. DRG 与 ICD10 编码相关论文阅读分享
  9. ildasm ilasm
  10. 单细胞测序系列之三:单细胞转录组测序
  11. 芯片设计流程介绍(从硬件设计语言到芯片制造)
  12. 5个步骤实现流程管理
  13. Linux下如何聊天-irc,MSN,ICQ,QQ你会用了吗?
  14. 【RocketMQ】发送事务消息
  15. Chrome浏览器关闭地址栏的搜索记录
  16. 计算机中怎样用公式计算结果,EXCEL中如何显示公式的计算结果?
  17. 用C#编写Visionpro相关窗体应用(.NET Framework)
  18. mysql stop failed_Mysql报错:Failed to stop mysqld.service: Unit mysqld.service not loaded.
  19. 一.wireshark界面学习
  20. Octave 安装步骤(仅供记录)

热门文章

  1. 【数据结构与算法】之深入解析“二叉树的序列化与反序列化”的求解思路与算法示例
  2. 第四章 Rails 背后的 Ruby
  3. 【MFC】MFC消息处理和映射
  4. 【Protocol Buffer】Protocol Buffer入门教程(七):导入定义
  5. 【Linux】一步一步学Linux——lnstat命令(189)
  6. 【Linux】Linux中at命令详解
  7. c语言 变量的左值和右值,C++雾中风景10:聊聊左值,纯右值与将亡值
  8. libevent源码学习----io多路复用的封装和使用
  9. 送计算机教授教师节礼物,教师节送教授什么礼物好
  10. 子集—leetcode78