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是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)