我使用 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%。
答案 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%")