4

我的要求涉及从 Excel 电子表格中读取值,并填充电子表格供用户修改并重新上传到我们的应用程序。其中一个单元格包含一个由 5 个字符组成的文本字符串,可以是字母、数字或两者的组合。其中一些字符串只包含数字,并以零开头。因此,单元格类型为文本;但是,当我使用 Apache POI 或 JExcel 填充电子表格以供用户修改时,它始终设置为单元格类型 General。

有没有办法使用这些库中的任何一个,或者我还没有看到的其他一些 excel api,来指定一个单元格的类型为文本?

4

2 回答 2

8

我的同事刚刚找到了一种方法来实现这一点。在 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"));
于 2012-05-23T16:54:14.277 回答
2

很多时候,当用户在类型(格式)为文本(字符串)的单元格中输入数字时,电子表格软件(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:
}
于 2012-05-29T07:05:17.773 回答