0

我有一个字符串数组,其值如下:

 String[] myArray = new String[4];
 myArray[0] = "one";
 myArray[1] = "2012-02-25";
 myArray[2] = "12345.58";
 myArray[3] = "1245";

我想使用 POI 将此数组写入 Excel 工作表,其中每个值将进入一个新列,如下所示:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("mySheet");
Row myRow = sheet.createRow(1);
Cell myCell;

for(int i=0;i < my.length;i++){
   myCell = myRow.createCell(i);
   myCell.setCellValue(myArray[i]);
   sheet.autoSizeColumn(i);
}

FileOutputStream out;

try {
        out = new FileOutputStream("myOutputFile");
        wb.write(out);
        out.close();
} catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

但是,很明显,所有内容都将作为文本转储到 Excel 工作表中。我在每个单元格的左上角收到一个绿色通知,指示“数字存储为文本”等。

假设,由于源系统限制,我将无法更改获取输入的方式,即我将继续仅作为字符串获取输入,我如何处理字符串中实际值的格式并将日期转储为 Excel 中的日期,作为数字的数字,作为文本的文本和作为正确十进制格式的双精度值的双精度值?

请注意,我没有关于我在字符串中获得的值类型的信息。我必须在运行时确定该值是否是文本、数字、浮点数、日期等,然后适当地放入 Excel 表中。

请在正确阅读之前不要标记问题。

谢谢阅读!

4

2 回答 2

1

您可以使用以下代码..

 if(myArray[i].matches(".*\\d.*") && ! myArray[i].contains("-"))    //For date assuming '-' would be a separator always
         {
            //Its a number(int or float).. Excel treats both as numeric

            HSSFCellStyle style = (HSSFCellStyle) wb.createCellStyle();
            style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
            mycell.setCellStyle(style);
            mycell.setCellValue(Float.parseFloat(myArray[i]));
         }
         else if(myArray[i].contains("-"))
         {
            // Its a date
            CellStyle cellStyle = wb.createCellStyle();
            cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
            mycell.setCellStyle(cellStyle);
            mycell.setCellValue(myArray[i]);
         }
         else
         {
            // Its a string/Text..
            mycell.setCellValue(myArray[i]);
         }
于 2013-09-23T10:24:12.670 回答
0

您可以尝试首先将字符串解析为整数。如果错误为浮点数。如果错误为日期。如果出错,那么应该是一个字符串。

于 2013-09-23T14:03:59.443 回答