org.apache.poi for xls写入数字格式问题

时间:2017-03-16 13:07:26

标签: java excel maven apache-poi

我的java程序使用org.apache.poi编写xls文档。 xx文件使用XL 2010以适当的数字格式生成,但XL 2013编号未格式化,并且在小数点后显示6位数

实施例: 在xl 2010中,12.123445显示为12.12,这是预期的

在xl 2013中12.123445显示为12.123225,预计它不应该在十进制之后舍入两位数。

我尝试使用最新的3.14,3.16-beta2升级我的org.apage.poi pom.xml。

目前正在使用3.10-FINAL。

知道怎么解决吗?或者任何可用于xl单元格值的org.apache.poi方法将其设置为数字,并在小数点后舍入为2位数。

代码段:

style = createStyle(sheet.getWorkbook(), (short) 10, fontWeight, fontColor);

                Double number = Double.parseDouble(colHeader);
                cell.setCellValue(number);
                style.setDataFormat(format.getFormat("0.00"));
                cell.setCellStyle(style);



createStyle():
protected HSSFCellStyle createStyle(Workbook wb, short fontSize, short boldWeight, short fontColor) {

        Font font = fontMap.get(getMapKey(fontSize, boldWeight, fontColor));

        if (font == null) {
            font = wb.createFont();
            font.setFontHeightInPoints(fontSize);
            font.setFontName("Arial");
            font.setBoldweight(boldWeight);
            font.setColor(fontColor);
            fontMap.put(getMapKey(fontSize, boldWeight, fontColor), font);
        }
        HSSFCellStyle style = ((HSSFWorkbook) wb).createCellStyle();
        style.setFont(font);
        return style;
    }

1 个答案:

答案 0 :(得分:0)

我创建了一个带有poi-bin-3.15-20160924 Jars的可执行示例,格式化了从(12.123445)到(12.12)的双精度 和(12.125)至(12.13):

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;


public class WriteReadXlsFormula {

public static void main(String[] args){

    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("Calculate Simple Interest");
    //To format a double
    HSSFCellStyle style = workbook.createCellStyle();
     style.setDataFormat(
                workbook.getCreationHelper().createDataFormat().getFormat("#,##0.00"));

    Row header = sheet.createRow(0);
    header.createCell(0).setCellValue("Pricipal Amount (P)");
    header.createCell(1).setCellValue("Rate of Interest (r)");
    header.createCell(2).setCellValue("Tenure (t)");
    header.createCell(3).setCellValue("Interest (P r t)");

    //Don't use the style and use DicimalFormat (comment 3 line of code under Cell contain the number to format comment)
    /*
    DecimalFormat df = new DecimalFormat("####.00");
    dataRow.createCell(1).setCellValue(df.format(12.125445)); 
    */


    Row dataRow = sheet.createRow(1);
    dataRow.createCell(0).setCellValue(14500d);

    //Cell contain the number to format 
    dataRow.createCell(1).setCellType(CellType.NUMERIC);
    dataRow.getCell(1).setCellStyle(style);
    dataRow.getCell(1).setCellValue(df1.format(12.125445));

    dataRow.createCell(2).setCellValue(3d);
    dataRow.createCell(3).setCellFormula("A2*B2*C2");



    try {
        FileOutputStream out = 
                new FileOutputStream(new File("formula.xls"));
        workbook.write(out);
        out.close();
        workbook.close();
        System.out.println("Excel written successfully..");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

 }

}