如何将单元格格式设置为Text

时间:2016-03-15 17:56:04

标签: java excel apache-poi

我正在使用Apache-POI 3.14。我需要将一个单元锁定到一个" Text"格式。我单元格中的数据可能都是数字,但仍然被视为字符串。当我写单元格时,我这样做:

cell.setCellValue("001");
cell.setCellType(Cell.CELL_TYPE_STRING);

当我在Excel中打开输出工作簿时,单元格包含正确的值(" 001"),并在角落显示一个小的绿色三角形。将鼠标悬停在感叹号上会显示悬停文本The number in this cell is formatted as text or preceded by an apostrophe。当我查看单元格格式(右键单击 - >格式化单元格)时,"类别"显示为" General"。我希望这是" Text"。

当用户通过仅输入数字来修改单元格中的值时,就会出现问题。因为"类别"是"一般",输入值并显示为数字,删除前导零和右对齐。

如何获得与Excel"格式化单元格相同的结果"对话框?

6 个答案:

答案 0 :(得分:8)

您可以尝试通过

将单元格格式设置为文本
DataFormat fmt = wb.createDataFormat();
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
    fmt.getFormat("@"));
cell.setCellStyle(cellStyle);

注意:CellStyles应该重复用于所有适用的单元格,不要为每个单元格创建新的单元格。

您也可以尝试使用.xlsx格式的“忽略错误”功能,但是对它的支持还没有完全完成,请参阅Issue 46136Issue 58641进行一些讨论。

另请参阅this MSDN page了解更多信息

答案 1 :(得分:4)

对于HSSF,

    DataFormat fmt = workbook.createDataFormat();
    CellStyle textStyle = workbook.createCellStyle();
    textStyle.setDataFormat(fmt.getFormat("@"));
    sheet.setDefaultColumnStyle(0, textStyle);

它只将整个列样式设置为Text,并将类别设置为Text。

但是,如果您使用的是XSSF格式,则它无法正常工作(我使用的是Apache Poi 3.15并且不适用于我)。 在这种情况下,除了以上代码之外,您还要将样式设置为要作为文本处理的每个单元格:

cell.setCellStyle(textStyle);

关于错误,您可以使用

sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT );

它忽略了第0行到9999以及第0列到9999的NUMBER_STORED_AS_TEXT错误,你不会看到它。

答案 2 :(得分:1)

看起来OP正在寻求Apache解决方案。经过一番搜索,我找到了这个答案:

HSSFCellStyle style = book.createCellStyle();
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));

答案 3 :(得分:0)

我无法对此进行测试,但您是否尝试过使用模板 - 一个空的excel文件,其中所有单元格都被格式化为文本?

答案 4 :(得分:0)

在这种情况下,我使用的是Apache-POI 3.15,并且我遇到了同样的问题,因此我以自己的风格验证了数据,我需要数字> 0和字符串:

try {
    if (Integer.parseInt(field + "") >= 0) {
        int valor = Integer.parseInt(field + "");
        cell.setCellValue(valor); //Int
    }
} catch (NumberFormatException nfe) {
    // no int
    try {
        if (Double.parseDouble(field + "") >= 0) {
            double valor = Double.parseDouble(field + ""); //double
            cell.setCellValue(valor);
        }
    } catch (NumberFormatException nfe2) {
        cell.setCellValue(field + ""); //String
    }
}

答案 5 :(得分:0)

对于Apache POI 4.0.1:

XSSFSheet sheet = workbook.createSheet("MySheetName");
sheet.addIgnoredErrors(new CellRangeAddress(0, 9999, 0, 9999), IgnoredErrorType.NUMBER_STORED_AS_TEXT);

请注意将工作表投射到org.apache.poi.xssf.usermodel.XSSFSheet而不是org.apache.poi.ss.usermodel.Sheet,否则方法addIgnoredErrors将是未知的。