我试图从电子表格中读取日期列和时间列。我可以从表中删除日期列,但不能删除时间列。
例如,我的工作表将有以下表格的行:
11/2/2012 12:15:01
我有以下代码来获取日期列:
while(cellIterator.hasNext()) {
HSSFCell cell = (HSSFCell)cellIterator.next();
switch(cell.getCellType()){
case HSSFCell.CELL_TYPE_NUMERIC:
HSSFCellStyle style = cell.getCellStyle();
if (HSSFDateUtil.isCellDateFormatted(cell))
{
d = (Date)getDateValue(cell);
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(dateFormat.format(d));
}
}
}
protected static Object getDateValue(HSSFCell cellDate)
{
double numericDateValue = cellDate.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(numericDateValue);
return date;
}
如你所见,我使用
hssfdateutil . iscelldateformated(单元格)
检查单元格中是否有日期值。我想知道我是否可以使用任何函数检查单元格是否有时间值。
excel表来自外部来源。因此,我将无法对其格式进行任何修改。
现在,我得到了日期列的正确日期值。但是,对于时间列,我得到了
12/31/1899
作为所有行的结果
这是我获取POI单元格的“仅日期”、“仅时间”或“日期-时间”值的粗略尝试
...
private String getCellValueAsString(Cell poiCell){
if (poiCell.getCellType()==Cell.CELL_TYPE_NUMERIC && DateUtil.isCellDateFormatted(poiCell)) {
//get date
Date date = poiCell.getDateCellValue();
//set up formatters that will be used below
SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat formatYearOnly = new SimpleDateFormat("yyyy");
/*get date year.
*"Time-only" values have date set to 31-Dec-1899 so if year is "1899"
* you can assume it is a "time-only" value
*/
String dateStamp = formatYearOnly.format(date);
if (dateStamp.equals("1899")){
//Return "Time-only" value as String HH:mm:ss
return formatTime.format(date);
} else {
//here you may have a date-only or date-time value
//get time as String HH:mm:ss
String timeStamp =formatTime.format(date);
if (timeStamp.equals("00:00:00")){
//if time is 00:00:00 you can assume it is a date only value (but it could be midnight)
//In this case I'm fine with the default Cell.toString method (returning dd-MMM-yyyy in case of a date value)
return poiCell.toString();
} else {
//return date-time value as "dd-MMM-yyyy HH:mm:ss"
return poiCell.toString()+" "+timeStamp;
}
}
}
//use the default Cell.toString method (returning "dd-MMM-yyyy" in case of a date value)
return poiCell.toString();
}
电子表格中日期和时间的快速入门。由于在创建文件格式时很有意义,但现在看起来很困惑的原因,电子表格没有日期、时间或日期时间类型。相反,它有数字和特殊的格式规则。
怎么看这个?在 Excel 单元格中键入 10.5,然后将其格式设置为日期时间。您将在1900年1月的正午约会。
因此,当您询问POI单元格是否采用日期格式时,没有简单的标志/类型要检查。相反,POI所能做的就是读取应用于单元格的格式设置字符串,并查看它是否看起来可疑地像日期。
加分-尝试存储1900年2月28日,然后添加一个-Excel忠实地复制了1900闰年左右的Lotus 123错误。。。
作为一般规则,DateUtil。对于日期单元格、时间单元格和日期时间单元格,isCellDateFormatted(cell)
将返回true。然而,有时您会得到一种非常奇怪的格式,Excel知道它是日期或时间,但POI无法识别它。对于这些,您仍然可以要求将单元格值作为日期,POI将对其进行转换。
所以,在你的例子中,如果POI说它是日期格式的,那就把值作为日期。现在,看看格式字符串。如果它是日期格式的,那就把它格式化为日期。日期和时间格式?把它格式化为你喜欢的日期时间。只有时间?把它格式化为时间?Timezones?你一定在笑……
哦,只要你不处理1900年左右的真实日期,你基本上可以只说日期工具。
问题内容: 我正在尝试从电子表格中读取日期列和时间列。我可以从工作表中撤消日期列,但不能撤消时间列。 例如,我的工作表将具有以下形式的行: 约会时间 2012年1月1日12:15:01 我有以下代码来获取日期列: 如您所见,我使用 HSSFDateUtil.isCellDateFormatted(cell) 检查单元格中是否有日期值。我想知道是否可以使用任何函数检查单元格是否具有时间值。 Exce
我有一段代码可以下载谷歌电子表格 连接超时默认为20秒。我试图将其设置为不同的值,但它不起作用。我不断得到 原因:java.net.SocketTimeoutException:java.net.SocketInputStream.socketRead0(本机方法)的读取超时~[na:1.7.060]在java.net.SocketInputStream.Read(SocketInputStrea
我正在尝试从多个google电子表格中删除一个特定的表格。 我有一个主电子表格,从所有其他电子表格收集数据。从主电子表格中,我可以在其他电子表格中执行不同类型的操作,如添加工作表、重命名工作表、隐藏和锁定工作表。 但无法删除其他电子表格中的表格。查看了其他线程,但找不到任何解决方法。 这就是我到目前为止得到的。它停在这一排: "fname.delete表(本周);}" 我很感谢大家对我的帮助,因为
我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?
人若自洁,脱离卑贱的事,就必作贵重的器皿,成为圣洁,合乎主用,预备行各样的善事。你要逃避少年的私欲,同那清心祷告主的人追求公义、信德、仁爱、和平。惟有那愚拙无学问的辩论,总要弃绝,因为知道这等事是起争竞的。(2 TIMOTHY 2:21-23) 电子表格 一提到电子表格,可能立刻想到的是excel。殊不知,电子表格“历史悠久”,比Word要长久多了。根据维基百科的记载整理一个简史: VisiCal
我想阅读Java快速入门中描述的谷歌电子表格 https://developers.google.com/sheets/quickstart/java 快速入门解释如何从给定范围读取数据 但我有一个问题,我不知道电子表格的范围。列数可以更改。例如,我如何在不知道范围的情况下读取表中的所有数据? 问候 迈克尔