0

以下のような値を持つ String 配列があります。

 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 で日付として日付をダンプするにはどうすればよいですか? 、数値としての数値、テキストとしてのテキスト、および適切な 10 進数形式の double 値としての double 値?

文字列で取得している値のタイプに関する情報がないことに注意してください。値がテキスト、数値、フロート、日付などであるかどうかを実行時に決定し、Excel シートに適切に配置する必要があります。

正しく読む前に質問にフラグを立てないでください。

読んでくれてありがとう!

4

2 に答える 2

1

You can use following code..

 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

最初に文字列を整数として解析してみてください。エラーの場合はフロートとして。日付としてエラーの場合。エラーの場合、well は文字列である必要があります。

于 2013-09-23T14:03:59.443 に答える