私はxlsxファイルで読んでいますApache POIライブラリ。
たとえば、ある行には、次のようなセルの値があります。
私の目標は:行のすべてのセルを文字列値として読み取ります。しかし、私が見るように、私は文字列として1-Sep-1を読み取ることができません、それはcell.getDateCellValue();で日付型()のように表すだけです。
1)どういうわけか2013年9月1日を文字列として読み取ることができますか: "01-Sep-13"; 2)異なる日付パターン(ddMMyyyy)および(dd-MMM-yy)がある場合、日付値を文字列に変換できますか?
コード:
行とセルを反復処理すると、ApachePOIは各セルタイプを分析します。
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();
}
}
2つのオプションがあります:
SimpleDateFormat
class を使用して、返されたDate
をString
として選択した形式でフォーマットします。必要なさまざまな形式ごとにSimpleDateFormat
インスタンスを作成できます。DataFormatter
class を使用して、Cell
を直接フォーマットします。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日。お役に立てれば
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
形式で日付が表示されます。
これがあなたの質問に対する答えです:
1)どういうわけか2013年9月1日を文字列として読み取ることができます: "01-Sep-13";
はい、できます。セルタイプを読み取る前に、セルタイプを文字列に設定する必要があります。このようなもの:
.
.
.
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);がある場合、日付値を文字列に変換できますか?
最初の答えはすでに文字列値を与えているので。それでも文字列値を日付に変換するには、@ rgettmanと@Keerthiが提案したようにSimpleDateFormatを使用できます
これがお役に立てば幸いです... :)
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
Javaを使用してExcelシートで文字列値を読み取るのはとても簡単です。これが私のやり方です。
Workbook wb=Workbook.getWorkbook(file);
Sheet s= wb.getSheet(1);
int row=s.getRows();
int col=s.getColumns();
for(int i=1;i<row;i++){
for(int j=0;j<col;j++){
Cell c=s.getCell(j,i);
String MyString=c.getContents().toString();
System.out.println(MyString);
}
}
私の目標は:行のすべてのセルを文字列値として読み取ります。しかし、私が見るように、私は01-Sep-13を文字列として読み取ることができず、それはcell.getDateCellValue();で日付型()のように表すだけです
XSSFExcelExtractorまたはExcelExtractorを使用して、正しくフォーマットされたセル値を取得できます。
注:-1)XSSFExcelExtractorはXLSXファイル用です2)ExcelExtractorはXLSファイル用です