Apache POI - 将行的单元格格式从String更改为Other

时间:2015-12-16 17:58:14

标签: java format apache-poi cell

您好我在Java中使用Apache POI从输入txt文件中读取并粘贴到xls工作表上。

我将输入txt文件中的每一行作为字符串传递到工作表上,但是,我的所有数字/日期字段都被粘贴为字符串,我很难改变为相关的数字/日期格式。

以下是我用来阅读输入的内容:

              LinkedList<String[]> text_lines = new LinkedList<>();
              try (BufferedReader br = new BufferedReader(new FileReader("C:/input.txt"))) {
                  String sCurrentLine;
                  while ((sCurrentLine = br.readLine()) != null) {
                      text_lines.add(sCurrentLine.split("\\t"));
                      }
                  } catch (IOException e) {
                  e.printStackTrace();
                  }

以下是我用来粘贴的内容:

         for(String[] line : text_lines){
            Row row = worksheet.createRow(row_num++);
            int cell_num = 0;
            for(String value : line){
                 Cell cell = row.createCell(cell_num++);
                 cell.setCellValue(value);
                 }}

以下是我试图将特定单元格更改为数字格式而不是字符串但不起作用,并且在生成xls时单元格的格式仍为字符串

        String formatStr = "#,##0";
        HSSFCellStyle commaNumber = output.createCellStyle();
        HSSFDataFormat format = output.createDataFormat();
        commaNumber.setDataFormat(format.getFormat(formatStr));

        c.setCellStyle(commaNumber);
        c.setCellType(Cell.CELL_TYPE_NUMERIC);
          }

请有人帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:3)

如果你能确保&#34;值&#34;这个代码应该有用。包含有效的可解析字符串:

for(String value : line)
{
    Cell cell = row.createCell(cell_num++);
    cell.setCellValue(new Double(value));
    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
}

EDIT 正如你所说,你的价值观并不总是可以解析的,你可以这样做&#34;技巧&#34;。

请注意:快速破解!您不应该使用Exceptions进行流量控制!

您可以尝试解析双倍,如果不成功=&gt;设置字符串值。

for(String value : line)
{
    Cell cell = row.createCell(cell_num++);
    try
    {
        cell.setCellValue(new Double(value));
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
    }
    catch(Exception ex)
    {
        cell.setCellValue(value);
    }
}