POI Java - 带小数的数字单元格

Mar*_*rta 2 java apache-poi

我在带有 POI 的单元格中遇到了很多数字格式问题。

我需要在单元格中打印一个数字的 11 位小数,并且该单元格具有数字格式以在您选择数据时进行求和

我有这个代码:

private void writeDecimal(HSSFRow row, Double data, int position) {
    String pattern = "#.0000000000";
    HSSFCell celda = row.createCell(position);
    CellStyle styleDecimal = styles.get(ITEM_DECIMAL); // Font and alignment
    styleDecimal.setDataFormat(libro.getCreationHelper().createDataFormat().getFormat(pattern));
    celda.setCellStyle(styleDecimal);
    celda.setCellType(Cell.CELL_TYPE_NUMERIC);
    celda.setCellValue(data);
}
Run Code Online (Sandbox Code Playgroud)

但结果总是打印较少的小数,因为 Excel 对数字进行四舍五入:

POI 的十进制问题

如果我将其转换DoubleString,则打印 11 位小数,但如果我选择所有数字,则不会得出总和。

知道如何解决这个问题吗?

谢谢

Nir*_*ara 5

打开xlsx文件选择列,右键单击单元格->设置单元格格式...->自定义->类型= 0.00000000000点击确定。

现在无论你在那个单元格上写什么,它都会以那种格式打印,如果你也选择它,它会显示总和。

按代码

import java.io.FileOutputStream;
import java.io.IOException;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.DataFormat;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;


    public class ChangeXlxsDataFormat {

        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub

             Workbook wb = new HSSFWorkbook();
                Sheet sheet = (Sheet) wb.createSheet("format sheet");
                CellStyle style;
                DataFormat format = wb.createDataFormat();
                Row row;
                Cell cell;
                short rowNum = 0;
                short colNum = 0;

                row = sheet.createRow(rowNum);
                cell = row.createCell(colNum);

                style = wb.createCellStyle();
                        row = sheet.createRow(rowNum++);
                cell = row.createCell(colNum);

                style = wb.createCellStyle();
                style.setDataFormat(format.getFormat("0.00000000000"));
                cell.setCellStyle(style);
                cell.setCellValue(5.12345678908);
                row = sheet.createRow(rowNum++);
                cell = row.createCell(colNum);
                cell.setCellValue(2.12345678908);
                FileOutputStream fileOut = new FileOutputStream("test.xls");
                wb.write(fileOut);
                fileOut.close();


        }

    }
Run Code Online (Sandbox Code Playgroud)