如何在java excel导入输出中将1000.0更改为1000?

时间:2014-02-21 19:49:31

标签: java log4j apache-poi

我刚刚使用了我的代码,但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();
}
}
}

3 个答案:

答案 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中修复它(更改单元格类型)。