我正在阅读 xlsx文件 - Apache POI库。
例如, 在某些行中,我有这样的单元格值:
我的目标是: 将行中的所有单元格读取为String值。 但正如我所见,我无法读取 01-Sep-13 作为字符串, 它只代表Date type()with cell.getDateCellValue();
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();
}
}
答案 0 :(得分:2)
您有两个选择:
SimpleDateFormat
class以您选择的格式将返回的Date
格式化为String
。您可以为所需的每种格式设置SimpleDateFormat
个实例。DataFormatter
class直接格式化Cell
。答案 1 :(得分:2)
您可以获取单元格#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);
您可以以字符串格式获取Date的值 - 2013年10月31日。希望这有帮助
答案 2 :(得分: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值。 仍然要将String值转换为日期,您可以使用SimpleDateFormat作为@rgettman和@Keerthi建议
希望这会有所帮助...... :)
答案 3 :(得分: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
格式提供您可以存储在数据库中的日期。
答案 4 :(得分: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
答案 5 :(得分:0)
我的目标是 :将行中的所有单元格读取为字符串值。但是正如我所看到的,我不能将01-Sep-13作为字符串读取,它只表示类似Date类型()和cell.getDateCellValue();
您可以使用XSSFExcelExtractor或ExcelExtractor来获取格式正确的单元格值。
注意: - 1)XSSFExcelExtractor用于XLSX文件 2)ExcelExtractor用于XLS文件
答案 6 :(得分:0)
使用java在excel表中读取字符串值非常容易。这是我的方式..
var label: UILabel = ...
var text: NSMutableAttributedString = ...
var paragraphStyle: NSMutableParagraphStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle
paragraphStyle.alignment = NSTextAlignment.Justified
paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
paragraphStyle.baseWritingDirection = NSWritingDirection.RightToLeft
text.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, text.length))
label.attributedText = text