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

时间:2014-02-21 04:53:17

标签: java excel apache-poi

我使用 POI 为创建的Excel文件获取Number stored as text warning。我想显示百分比。这个question讨论了相同的内容,但它适用于python。有人可以建议我如何在使用POI的java中避免这种情况吗?

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

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

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

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

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

5 个答案:

答案 0 :(得分:5)

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

您可能想要做的是:

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

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

编辑根据热门请求,这里有一个独立的程序,您可以使用该程序查看.xls和.xlsx文件。使用POI 3.10 final测试,并在类路径上使用all the required dependencies and component jars

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");
  }
}

答案 1 :(得分:4)

尝试同时设置CellType:

cell.setCellType(Cell.CELL_TYPE_NUMERIC);

答案 2 :(得分:1)

    if(NumberUtils.isDigits(text)){
        titleCell.setCellValue(Integer.parseInt(text));
    }else{
        titleCell.setCellValue(text);
    }

答案 3 :(得分:1)

    XSSFWorkbook xSSFWorkbook = new XSSFWorkbook();
    CreationHelper createHelper = xSSFWorkbook.getCreationHelper();
    XSSFCellStyle numberStyle = xSSFWorkbook.createCellStyle();             
    numberStyle.setDataFormat(createHelper.createDataFormat().getFormat("###.00"));
    double d = 50.0;
    XSSFRow dataRow = sheet.createRow(1);
    Cellcel1 = dataRow.createCell(1);
    cel1.setCellValue(d);

答案 4 :(得分:0)

这可能有点旧,但试试这个:

df.getFormat("0.00%")