使用POI在Excel中存储为文本警告的编号

ric*_*ick 4 java excel apache-poi

我正在Number stored as text warning使用POI获取创建的excel文件.我想显示百分比.这个问题讨论相同,但它是为python.有人可以建议我如何在使用POI的java中避免这种情况吗?

以下是我收到此警告的行.

workbook= new XSSFWorkbook();
sh1 = wb.createSheet("Data Sheet");
    cell = row.createCell(3);
    cell.setCellValue(37 + "%");
Run Code Online (Sandbox Code Playgroud)

根据Gagravarr的回答我这样做了.

XSSFDataFormat df = workbook.createDataFormat();
                    CellStyle cs = wb.createCellStyle();
                    cs.setDataFormat(df.getFormat("%"));
                    cell.setCellValue(0.37);
                    cell.setCellStyle(cs);
Run Code Online (Sandbox Code Playgroud)

但它现在只显示为0.37而没有任何警告,而不是37%.

Gag*_*arr 5

您收到警告,因为正如它所说,您将一个数字存储为文本.

你可能想做的是:

CellStyle cs = wb.createCellStyle();
cs.setDataFormat(df.getFormat("%"));
cell.setCellValue(0.37);
cell.setCellStyle(cs);
Run Code Online (Sandbox Code Playgroud)

这会将数字37存储为数字,并告诉excel将百分比格式字符串应用于它.哦,因为37%是0.37,你需要存储0.37而不是37!

编辑按照流行的请求,这里有一个独立的程序,您可以使用它来查看.xls和.xlsx文件.使用POI 3.10 final测试,并在类路径上使用所有必需的依赖项和组件jar.

public class TestPercent {
  public static void main(String[] args) throws Exception {
    System.out.println("Generating...");

    for (Workbook wb : new Workbook[] {new HSSFWorkbook(), new XSSFWorkbook()}) {
        Sheet sheet = wb.createSheet("Data Sheet");
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(3);

        DataFormat df = wb.createDataFormat();
        CellStyle cs = wb.createCellStyle();
        cs.setDataFormat(df.getFormat("%"));
        cell.setCellValue(0.37);
        cell.setCellStyle(cs);

        String output = "/tmp/text.xls";
        if (wb instanceof XSSFWorkbook) { output += "x"; }
        FileOutputStream out = new FileOutputStream(output);
        wb.write(out);
        out.close();
    }

    System.out.println("Done");
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

还尝试设置 CellType:

cell.setCellType(Cell.CELL_TYPE_NUMERIC);
Run Code Online (Sandbox Code Playgroud)