我的要求涉及从 Excel 电子表格中读取值,并填充电子表格供用户修改并重新上传到我们的应用程序。其中一个单元格包含一个由 5 个字符组成的文本字符串,可以是字母、数字或两者的组合。其中一些字符串只包含数字,并以零开头。因此,单元格类型为文本;但是,当我使用 Apache POI 或 JExcel 填充电子表格以供用户修改时,它始终设置为单元格类型 General。
有没有办法使用这些库中的任何一个,或者我还没有看到的其他一些 excel api,来指定一个单元格的类型为文本?
我的要求涉及从 Excel 电子表格中读取值,并填充电子表格供用户修改并重新上传到我们的应用程序。其中一个单元格包含一个由 5 个字符组成的文本字符串,可以是字母、数字或两者的组合。其中一些字符串只包含数字,并以零开头。因此,单元格类型为文本;但是,当我使用 Apache POI 或 JExcel 填充电子表格以供用户修改时,它始终设置为单元格类型 General。
有没有办法使用这些库中的任何一个,或者我还没有看到的其他一些 excel api,来指定一个单元格的类型为文本?
我的同事刚刚找到了一种方法来实现这一点。在 JExcel 中,它可以通过使用 WritableCellFormat 来完成,例如:
WritableCellFormat numberAsTextFormat = new WritableCellFormat(NumberFormats.TEXT);
然后,当您创建要添加到工作表的单元格时,您只需像往常一样传递格式:
Label l = new Label(0, 0, stringVal, numberAsTextFormat);
如果您使用的是 Apache POI,您将创建一个 HSSFCellStyle,然后设置它的数据格式,如下所示:
HSSFCellStyle style = book.createCellStyle();
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));
很多时候,当用户在类型(格式)为文本(字符串)的单元格中输入数字时,电子表格软件(openoffice 或 msoffice)会自动更改其格式。我正在使用 apache poi,这是我编写代码的方式:
cell = row.getCell();
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
// if cell fomratting or cell data is Numeric
// Read numeric value
// suppose user enters 0123456 (which is string), in numeric way it is read as 123456.0
// Now I want ot read string and I got number...Problem?????
//well this is the solution
cell.setCellType(Cell.CELL_TYPE_STRING); // set cell type string, so it will retain original value "0123456"
value = cell.getRichStringCellValue().getString(); // value read is now "0123456"
break;
default:
}