我刚刚使用了我的代码,但excel表中的数字并没有在java控制台中以正确的方式出现。例如,年龄应为20岁,但它的出现率为20.0。有什么建议吗?
另外,由于某种原因,我的记录器出错了。
log4j:WARN No appenders could be found for logger (package.JamaisDisplayMenu).
log4j:WARN Please initialize the log4j system properly.
我在另一个项目中设置了完全相同的方式,它运行正常。关于这个的任何想法?
这是我的代码......
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
public class JamaisDisplayMenu {
private final static Logger logger = Logger.getLogger(JamaisDisplayMenu.class); //starts logger
public static void main( String [] args ) {
try {
InputStream input = new BufferedInputStream(
new FileInputStream("c:/Users/dude/Desktop/Data2.xls"));
logger.error("File parsed");
POIFSFileSystem fs = new POIFSFileSystem( input );
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while( rows.hasNext() ) {
HSSFRow row = (HSSFRow) rows.next();
System.out.println("\n");
Iterator cells = row.cellIterator();
while( cells.hasNext() ) {
HSSFCell cell = (HSSFCell) cells.next();
if(HSSFCell.CELL_TYPE_NUMERIC==cell.getCellType())
System.out.print( cell.getNumericCellValue()+" " );
else
if(HSSFCell.CELL_TYPE_STRING==cell.getCellType())
System.out.print( cell.getStringCellValue()+" " );
else
if(HSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType())
System.out.print( cell.getBooleanCellValue()+" " );
else
if(HSSFCell.CELL_TYPE_BLANK==cell.getCellType())
System.out.print( "BLANK " );
else
System.out.print("Unknown cell type");
logger.error("File parsed");
}
}
} catch ( IOException ex ) {
ex.printStackTrace();
}
}
}
答案 0 :(得分:2)
您正在使用的方法返回一个double值,您可能想要该值的最低值(年龄)或舍入值(如果您想要某物的价格,可能是最接近的$)
替换:
System.out.print( cell.getNumericCellValue()+" " );
使用:
年龄 System.out.print( new Double(Math.floor(cell.getNumericCellValue())).intValue() +" " );
或
System.out.print( new Double(cell.getNumericCellValue()+0.5).intValue() +" " );
进行四舍五入
答案 1 :(得分:1)
在不使用POI
库的情况下对其进行格式化,就像在gravityplanx的答案中一样。要从Excel工作表中获取确切的格式,请使用以下
DataFormatter formatter = new DataFormatter();
...
System.out.print(formatter.formatCellValue(cell)+" " );
阅读DataFormatter doc了解它允许的所有格式。
答案 2 :(得分:-1)
考虑将单元格类型添加到调试输出中。有问题的单元可能会以CELL_TYPE_STRING的形式出现,而您正在获取预先格式化的文本而不是数字。如果是这种情况,您必须在excel中修复它(更改单元格类型)。