关于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的数字);
就可以了
是啊,但是导入后变成文本值了,我想在java代码里再把数值变成日期类型!
追答poi还是jxl啊?其实excel的每一个元素都是一个对象,你设几个断点,看看是不是获取的方法错了
以上是关于关于HSSFWorkbook读取excel文件的问题的主要内容,如果未能解决你的问题,请参考以下文章