8

私が読んでいるxlsxファイルがあります - Apache POI Library。

たとえば、ある行には、次のようなセル値があります。

2013 年 9 月 1 日 | 15136.00| マット|……


私の目標は 、行内のすべてのセルを文字列値として読み取ることです。しかし、ご覧のとおり、 01-Sep-13を文字列として読み取ることはできません。それは、cell.getDateCellValue(); を使用して Date type () のように表すだけです。


1) どうにかして 01-Sep-13 を文字列: "01-Sep-13"; として読み取ることができますか? 2)日付パターン(ddMMyyyy) と (dd-MMM-yy)が異なる場合、Date 値を文字列に変換できますか?

コード:

行とセルを反復処理すると、Apache POI は各セル タイプを分析します。

String normalizeCellType(Cell cell) {

    switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
           return cell.getRichStringCellValue().getString());            
        case Cell.CELL_TYPE_NUMERIC:
            if (DateUtil.isCellDateFormatted(cell)) {

                Date date = cell.getDateCellValue(); ????????????
                System.out.println(date);

            } else {

                ....
            }
            break;
        case Cell.CELL_TYPE_BOOLEAN:
           return ....
        case Cell.CELL_TYPE_FORMULA:
           return ....
        default:
            System.out.println();
    }
}
4

7 に答える 7

5

cell#getDateCellValue() の戻り値を取得し、SimpleDateFormat を使用してそれを String インスタンスに変換できます。

 // Create an instance of SimpleDateFormat used for formatting 
    // the string representation of date (month/day/year)
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    // Get the date today using cell.getDateCellValue() 
    Date today = cell.getDateCellValue()       
    // Using DateFormat format method we can create a string 
    // representation of a date with the defined format.
    String reportDate = df.format(today);

2013 年 10 月 31 日という文字列形式で Date の値を取得できます。お役に立てれば

于 2013-10-22T18:08:33.003 に答える
3

次の 2 つのオプションがあります。

  • Java のSimpleDateFormatクラスを使用して、返さDateれたStringを選択した形式の としてフォーマットします。SimpleDateFormat必要なフォーマットごとにインスタンスを持つことができます。
  • Apache POI のDataFormatterクラスを使用して、直接フォーマットしますCell
于 2013-10-22T18:06:31.230 に答える
0
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
java.util.Date d =  row1.getCell(i).getDateCellValue();
String buy_date = df.format(d);
System.out.println("date is :- "+ buy_date);

出力は

date is :- 2014/08/01

Stringこれで、データベースに保存できる形式で日付が表示されます。

于 2014-08-01T13:30:40.010 に答える
0

質問に対する回答は次のとおりです。

1) どうにかして 01-Sep-13 を文字列: "01-Sep-13"; として読み取ることができますか?

はい、できます。読み取る前に、Cell タイプを String に設定する必要があります。このようなもの:

.
.
.
int fcell = row.getFirstCellNum();// first cell number of excel
int lcell = row.getLastCellNum(); //last cell number of excel
while (rows.hasNext()) {
row = (XSSFRow) rows.next();//increment the row iterator
for (int i = fcell; i < lcell; i++) {
    row.getCell(i).setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);
    .
    .
    ..//processing
    .
    .
    }
}

2.) 異なる日付パターン (ddMMyyyy) と (dd-MMM-yy) がある場合、Date 値を文字列に変換できますか?

最初の答えはすでに文字列値を提供しているためです。String 値を日付に変換するには、SimpleDateFormat を @rgettman および @Keerthi が提案したように使用できます。

これが役立つことを願っています... :)

于 2013-10-22T18:22:38.977 に答える
0

私の目標は次のとおりです。行内のすべてのセルを文字列値として読み取ります。しかし、ご覧のとおり、01-Sep-13 を文字列として読み取ることはできません。それは、cell.getDateCellValue(); を使用して Date type () のように表すだけです。

XSSFExcelExtractor または ExcelExtractor を使用して、正しくフォーマットされたセル値を取得できます。

注: - 1) XSSFExcelExtractor は XLSX ファイル用です 2) ExcelExtractor は XLS ファイル用です

于 2015-03-30T08:49:59.287 に答える
0

Apache POI には、これを行う機能があります。呼び出すだけです。使用する必要があるクラスはDataFormatterです。これをセルに渡すと、Excel がそのセルに対して表示する内容を含む文字列が返されるように最善を尽くします。文字列セルを渡すと、文字列が返されます。書式設定ルールが適用された数値セルを渡すと、それらに基づいて数値が書式設定され、文字列が返されます。「日付」セル (日付の書式設定ルールを持つ数値セル) を渡すと、日付として書式設定され、文字列が返されます

次のラウンドトリップ コードを使用して、動作を確認できます。

 DataFormat df = workBook.createDataFormat();
 CellStyle dateStyle = wb.createCellStye();
 setDataFormat.setDataFormat(df.getFormat("dd-mmm-yy"));

 Cell cell = row.createCell(0);
 cell.setCellStyle(dateStyle);

 // Set it to be a date
 Calendar c = Calendar.getInstance();
 c.set(2013,9-1,1); // Don't forget months are 0 based on Calendar
 cell.setCellValue( c.getTime() );

 // Get it formatted as a string
 DataFormatter formatter = new DataFormatter();
 String cellAsStr = formatter.formatCellValue(cell);

 // cellAsStr will now be "01-Sep-13"
 // based on the format rules applied to the cell
于 2014-08-02T12:31:57.260 に答える