java poi 读取excel 获得一行的单元格个数不对

java poi 读取excel 获得一行的单元格个数不对,第1张

package comlinyistest1;

import orgapachepoihssfusermodelHSSFCell;

import orgapachepoihssfusermodelHSSFRow;

import orgapachepoihssfusermodelHSSFSheet;

public class HssfCells

{

public void getCellValues(HSSFSheet sheet)

{

if(sheet == null)

{

Systemoutprintln("sheet is null");

return ;

}

for(int i = 0 ; i < sheetgetLastRowNum() ; i ++)

{

HSSFRow row = sheetgetRow(i) ;

if(row == null)

{

Systemoutprintln("单元格第" + (i+1)+ "行为空");

}

else

{

for(int j = 0 ; j < rowgetLastCellNum() ; j ++)

{

HSSFCell cell = rowgetCell(j) ;

if(cell == null)

{

Systemoutprintln("单元格第" + (i+1)+ "行 " + (j+1) + "列为null");

}

else

{

String s = cellgetCellType() == HSSFCellCELL_TYPE_STRINGcellgetStringCellValue():cellgetNumericCellValue()+"";

Systemoutprintln("单元格第" + (i+1)+ "行 " + (j+1) + "列值为" + s);

}

}

}

}

}

}

我是如何做没有问题的!

(INT I = 0; I <3; i + +){

??HSSFRow行HSSFCellUtilgetRow(I,workBookgetSheetAt(0));

?HSSFCell细胞= HSSFCellUtilgetCell(行,0);

??的字符串值= NULL;

??开关(cellgetCellType())

???

????情况下HSSFCellCELL_TYPE_FORMULA:

????值=“公式”;

????;

??情况HSSFCellCELL_TYPE_NUMERIC:

????值=“数值=”+ cellgetNumericCellValue();

????;

??情况HSSFCellCELL_TYPE_STRING:

????值=“字符串值=”+ cellgetStringCellValue();

????;

???默认值:

???}

??Systemoutprintln(“CELL COL =”+ cellgetCellNum()+“VALUE =”+值);

}

其结果是:

CELL列= 0 VALUE =数值= 100

CELL列= 0 VALUE =数值= 200

CELL列= 0值=式

如果你想删除值的A3,它是必要的,以中使用cellgetNumericCellValue();来接,而不是到HSSFCellCELL_TYPE_FORMULA:这个分支。

是指计算公式以及计算结果。

碰到读取公式类型的单元格读不出来,试了HXSSFWorkbook也读不出来,后来试了下XSSFCellgetCTCell()getV() 就读出来了。

但有个问题就是XSSFCellgetCTCell()getV() 是重新计算一遍的,如果单元格的值是另外几个单元格的复数值计算的,单元值可能会出现111000000000001 (1110) 111199999999999(1112)这种数的。

解决可以:再添加一列值等于公式列,读取新列就行了;实在不想的话就转回xls文件读取。

这个问题在java贴吧里常见,并且有很多方式完成,这里就给你贴一份,你试着在贴吧里和百度知道里,学习程序方面的问题解答。

public String[][] readExcel(String filePath) {

String[][] s = null;

try {

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(

filePath));

HSSFSheet sheet = workbookgetSheetAt(0);

int rows = sheetgetPhysicalNumberOfRows();

s = new String[rows][];

if (rows > 0) {

// 获取总列数`

int cells = sheetgetRow(0)getPhysicalNumberOfCells();

for (int r =0; r < rows; r++) {

HSSFRow row = sheetgetRow(r);

String[] cellsvalue = new String[cells+1];

for (short c = 0; c < cells; c++) {

String value = "";

HSSFCell cell = rowgetCell(c);

if (cell != null) {

switch (cellgetCellType()) {

case HSSFCellCELL_TYPE_FORMULA:

//

break;

case HSSFCellCELL_TYPE_NUMERIC:

if (HSSFDateUtilisCellDateFormatted(cell)) {

value = new javatextSimpleDateFormat(

"yyyy-MM-dd")format(cell

getDateCellValue());

} else {

value = StringvalueOf(cell

getNumericCellValue());

}

break;

case HSSFCellCELL_TYPE_STRING:

value = cellgetStringCellValue();

break;

case HSSFCellCELL_TYPE_BLANK:

value="";

default:

break;

}

if (cell == null) {

value="";

}

}

cellsvalue[c] = value;

if(valueendsWith("0")){

cellsvalue[c] = valuesubstring(0, valuelength()-2);

}

}

s[r] = cellsvalue;

javaioFile myfile = new javaioFile(filePath);

if (myfileexists()) {

myfiledelete();

}

}

}

} catch (Exception ex) {

// TODO 自动生成 catch 块

exprintStackTrace();

}

return s;

}

以上就是关于java poi 读取excel 获得一行的单元格个数不对全部的内容,包括:java poi 读取excel 获得一行的单元格个数不对、poi往excel中写数据时,为什么HSSFCellStyle没办法作为参数呢、poi中HSSFCell.CELL_TYPE_FORMULA是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9373737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存