关于HSSFWorkbook读取excel文件的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于HSSFWorkbook读取excel文件的问题相关的知识,希望对你有一定的参考价值。

我用HSSFWorkbook读取后缀为.xls文件,直接读就抛异常“InvalidOperationException: Can't open the specified file:”。用excel打开.xls文件后保存,再用HSSFWorkbook读取,就没有问题了!请问这是怎么回事啊?是后缀为.xls的文件不是真正的xls文件码?

一、简单说明
excel2003和excel2007区别比较大,最直观的感受就是扩展名不一样。
不过,使用POI的API都是面向接口编程的,实际使用起来区别其实不大。
代码最直观,直接看代码。

二、范例

String EXTENSION_XLS = "xls"

String EXTENSION_XLSX = "xlsx"

Workbook getWorkbook(String filePath)

=

=

=

=

preReadCheck(String filePath)

File file =

(!

FileNotFoundException("传入的文件不存在:" +

(!(filePath.endsWith(EXTENSION_XLS) ||

FileFormatException("传入的文件不是excel"

readExcel(String filePath)

Workbook workbook =

=

(
numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++
=

(sheet ==

"=======================" + sheet.getSheetName() + "========================="

firstRowIndex =

lastRowIndex =

Row firstRow =

(
i = firstRow.getFirstCellNum(); i <= firstRow.getLastCellNum(); i++
=
=
.getCellValue(cell,

" " + cellValue + "\t"
""

(
rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++
= sheet.getRow(rowIndex);

firstColumnIndex = currentRow.getFirstCellNum();

lastColumnIndex = currentRow.getLastCellNum();

(
columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++
= currentRow.getCell(columnIndex);

String currentCellValue =
.getCellValue(currentCell,
);

System.out.print(currentCellValue + "\t"
""
"======================================================"

(workbook !=

String getCellValue(Cell cell,

(cell ==

""

(cell.getCellType() ==

(cell.getCellType() ==
三、其他
在Excel2010上试的时候,excel中明明设置的都是文本类型,但是读取的时候,把数字“1”读成“1.0”。
所以在getCellValue()方法中,把cell单元格的式样改了一下,确保数字“1”文本读出来还是“1”。
参考技术A 你用文本的编辑软件看看到底是不是真正的EXCEL文件,或许只是后缀相同、而却是一些格式文件

java代码怎么实现 excel导入的文本值转换成日期

读取excel文件中日期内容是通过poi获取的,代码如下:

HSSFWorkbook excbook = new HSSFWorkbook(ExcFile);
//获取第一个sheet页 HSSFSheet excSheet = excbook.getSheetAt(0);
//获取第一行
HSSFRow oneRow = excSheet.getRow(0);
//获取第一行的第一个表格  
HSSFCell oneCell = oneRow.getCell(0);   
 switch (oneCell.getCellType()) 

  case HSSFCell.CELL_TYPE_NUMERIC:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

    if(HSSFDateUtil.isCellDateFormatted(oneCell)) 

    String  str = sdf.format(HSSFDateUtil.getJavaDate(oneCell.getNumericCellValue())).toString();

    System.out.println(str); 
    
   break;
 

   

参考技术A 换一个读excel的jar包。Apache的那些个jar包,读excel时,时间字段之类的不太好使。
建议使用 jxl.Workbook,读出来就是yyyy/MM/dd格式。
参考技术B 用 java.text 包里的
SimpleDateFormat类 的parse方法 可以实现追问

麻烦能回答的具体点么,例如我在excel中录入的时间为2012-9-10,导入到java里就变成了41162,然后我想把41162再变成2012-9-10,怎么实现? 最好能写上代码,真的非常感谢!

追答

excel里的日期型统统加引号就可以 了,
不加的话没办法的

追问

加上引号啊,好像是不可以,由于是给客户做的,只能我们在程序里控制!不过依然感谢您的回答,非常感谢!

追答

如果是这样就只能傻算了
excel的日期形式内部保存是序列形的数字,得到的方法就是 1900/1/1 =1 而后每一天加1
即1900/1/2=2 1900/1/3=3....类推
java呢 就
Calendar cld = Calendar.getInstance() ;
cld .set(1900,1,1);
cld.add(Calendar.DAY_OF_YEAR , Excel的数字);
就可以了

本回答被提问者和网友采纳
参考技术C 你的excel里面的字段不是日期类型么?追问

是啊,但是导入后变成文本值了,我想在java代码里再把数值变成日期类型!

追答

poi还是jxl啊?其实excel的每一个元素都是一个对象,你设几个断点,看看是不是获取的方法错了

以上是关于关于HSSFWorkbook读取excel文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

HSSFWorkbook生成excel文件

java读取excel文件

java如何读取整个excel文件的内容

java代码怎么实现 excel导入的文本值转换成日期

HSSFWorkbook-SXSSFWorkbook导出excel文件获取大小记录

Java中开发POI读取导入Excel文件及验证