我有一个格式化为时间的单元格:
执行此调用:
Browser.msgBox(SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1').getRange('F6').getValue());
结果:
地球上是怎么回事?感谢。
答案 0 :(得分:1)
你输入了.getStrange()...开玩笑;) 我有同样的,但我只在1900年1月1日前2天。你有没有尝试过其他时间?输入12:00:00
时我会得到这个Sat Dec 30 1899 12:00:00 GMT+0100 (CET)
您可以通过此脚本确定以毫秒为单位的补偿来解决此问题:
function findDifferenceInTime() {
var field = "A2";
var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(field);
var oldValue = range.getValue(), oldFormat = range.getNumberFormat();
range.setNumberFormat("H:mm:ss");
range.setValue(0);
var value = range.getValue();
range.setValue(oldValue);
range.setNumberFormat(oldFormat);
Logger.log("The time 0:00:00 will be represented as: " + - new Date(value).getTime());
return - new Date(value).getTime();
}
然后用这个脚本纠正这个问题(这就是我如何解决hacky风格)
function test() {
Logger.log(displayTime(getTime("A2")));
}
function getTime(range) {
var value = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(range).getValue();
var beginningOfTimes = findDifferenceInTime();
var milliseconds = new Date(value).getTime() + beginningOfTimes;
return milliseconds;
}
function displayTime(milliseconds) {
var h = Math.floor(milliseconds/(60*60*1000));
var m = (Math.floor(milliseconds/(60*1000))) % 60;
var s = (Math.floor(milliseconds/1000)) % 60;
return showTwoDigits(h) + ":" + showTwoDigits(m) + ":" + showTwoDigits(s);
}
function showTwoDigits(number) {
return ("00" + number).slice(-2);
}
答案 1 :(得分:1)
另一个更简单的解决方案是暂时将格式转换为字符串,然后获取值:
function getValueAsText(range) {
var oldFormat = range.getNumberFormat();
range.setNumberFormat("@STRING@");
var text = range.getValue();
range.setNumberFormat(oldFormat);
range.setValue(text);
return text;
}
function testIt() {
var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1').getRange('F6');
Logger.log(getValueAsText(range));
}
答案 2 :(得分:0)
我认为最终的解决方案是电子表格中设置的时区(菜单文件 - >电子表格首选项)和脚本编辑器中设置的时区(菜单文件 - >项目属性)必须相同。如果您有时间区1:00巴黎和1:00柏林,那么您甚至会得到奇怪的结果。您还需要在脚本中再次将日期格式化为正确的时区:
null