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%.
您收到警告,因为正如它所说,您将一个数字存储为文本.
你可能想做的是:
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)