【问题标题】:Google apps script getting wrong duration values谷歌应用脚​​本得到错误的持续时间值
【发布时间】:2015-09-02 19:06:54
【问题描述】:

朋友们!在我的工作表中,我有一个持续时间格式的列。

http://dl1.joxi.net/drive/0007/2131/485459/150902/fc427ebb50.jpg

我正在尝试使用此函数获取此列的值:

function getSheetValues(startRow, startCmn, maxColumn) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mainSheet = ss.getSheets()[0];
var range = mainSheet.getRange(startRow, startCmn, mainSheet.getMaxRows(),   maxColumn);
return range.getValues();
}

var mainSheetData = getSheetByNameValues(2, 1, 9);
var test =  mainSheetData[2][6];
Logger.log(test);

结果我得到了错误的值。示例:对于第三行 (00:23:00.000) 我得到这个:Sat Dec 30 02:13:47 GMT+05:53 1899。可能是由于日期自动格式化。我怎样才能避免这种情况?有什么方法可以在不改变列本身格式的情况下将值 (00:23:00.000) 作为平面文本获取?

希望您的帮助,朋友们。

【问题讨论】:

  • 我认为这会有所帮助:stackoverflow.com/questions/17715841/…
  • 点赞。找不到使用 Google Script 持续时间类型字段的方法。它既不是时间戳也不是日期。有人知道是什么吗?

标签: javascript google-apps-script google-sheets


【解决方案1】:

假设您可以完全控制电子表格...如果您真的只想要 '00:20:00.000' 的字符串表示形式,最简单的做法是在实际电子表格本身中设置该列的格式,以是纯文本,即

  1. 选择列
  2. 格式 -> 数字 -> 纯文本

然后它不会被转换为日期,你应该得到你想要的原始字符串值。

如果您无法控制(或以其他方式保证)该列的格式,您最终将不得不执行 jeremy 在评论中建议的操作。

【讨论】:

    【解决方案2】:

    您也可以以编程方式完成所有操作,将范围复制到另一个单元格,将 numberFormat 设置为文本,然后删除这个复制的范围(或保留它):

    function go(){
      var ss = SpreadsheetApp.getActiveSheet(), rang1 = ss.getRange('A11'), rang2 = ss.getRange('A12');
    
      rang1.copyTo(rang2);
      Logger.log(rang2.setNumberFormat('@STRING@').getValue());
      rang2.clear();
    };
    

    这当然可以同时对整个范围进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多