【问题标题】:Custom Google Sheet Frozen Timestamp Formula自定义 Google 表格冻结时间戳公式
【发布时间】:2017-03-17 18:56:14
【问题描述】:

在此之前,我并不是特别精通 Google Sheet 脚本,只是在谷歌搜索方面相当不错,并且可以为我制作一些东西。

如果我将文章保存在我的 RSS 阅读器中,我正在使用 IFTTT.com 自动附加 Google 表格。

根据 IFTTT 的工作原理,它会根据已保存文章的各种属性在工作表底部添加一行。

我对向该行添加自动非易失性时间戳感到困惑。

我尝试使用下面的自动时间戳功能,当我在单元格中输入时该功能有效,但在附加工作表时无效。

function onEdit(event)
{ 
  var timezone = "GMT-5";
  var timestamp_format = "MM-dd-yyyy"; // Timestamp Format. 
  var updateColName = "Article Title";
  var timeStampColName = "Date Discovered";
  var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script.


  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

IFTTT 可让您设置将哪些数据移植到哪一列,并为来自 Feedly 的数据提供特定的“成分”,您可以将其放入一列。

它们还允许静态文本和公式。

意识到这一点,我发现了以下自定义函数,这似乎有点工作。

function timestamp() {
return new Date()
}

这让我可以添加一个函数来检查文章的标题是否有内容,如果为真,则加上时间戳。

=时间戳(INDIRECT("E"&ROW()))

奇怪的是,当我今天重新加载工作表时(我昨天输入了公式),这个公式的第一行没有改变,工作表下面的一行也没有改变。

来源表:https://docs.google.com/spreadsheets/d/1ybfgOgBkqHdld9_sexzMfdMV2lT6Qp7WgQ8Di96S-a8/edit?usp=sharing

提前非常感谢。

【问题讨论】:

  • 查看 OnEdit 或 OnSubmit {Event Object}(developers.google.com/apps-script/guides/triggers/events) 可能会运行该函数并将时间戳放在正确的位置。这将是 Trigger IFTTT 导致的函数(如果有)。如果是 OnEdit,那么您可以从传递给触发器的数据中获取行。其他触发器可能需要遍历电子表格以找到最后一行。

标签: google-sheets formulas ifttt


【解决方案1】:

因为您只对发现日期感兴趣,而不太担心确切时间。您可以为每天午夜后运行的函数设置时间触发器,以将昨天日期的时间戳添加到具有非空“文章标题”列的行。

这是执行此操作的代码,还添加了一个设置每日触发器的功能

// Run this function to setup daily trigger to run at midnight to set the date of discovery.

function IntializeTrig(){

 ScriptApp.newTrigger("addTimeStamp").timeBased().atHour(0).everyDays(1).create()
  // If you have issues with timezone or if you work late at night you can change time to say 2 am by changing to this ".atHour(2)"
}
// This function checks to see if the column Date Discovered is empty and add yesterday date to it, if Article Title column is a Non empty String
function addTimeStamp(){
 var ss = SpreadsheetApp.getActive()
 var sheet = ss.getSheetByName("Sheet1") 
 var updateColName = "Article Title";
 var timeStampColName = "Date Discovered";
 var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
 var dateCol = headers[0].indexOf(timeStampColName), dateCol =dateCol + 1;
 var articleCol = headers[0].indexOf(updateColName), articleCol = articleCol + 1;
 var numOfCol
 if (dateCol < articleCol){
     numOfCol = articleCol
 }else {
     numOfCol = dateCol
 }
 var yesterday = new Date(Date.now() - 864e5)
 var yestDate = yesterday.toISOString().slice(0,10)
 var data = sheet.getRange(2, 1,sheet.getLastRow()-1, numOfCol).getValues()
 for (var i = 0 ; i< data.length ; i++){
   if (data[i][articleCol - 1] !== "")
     if (data[i][dateCol - 1] == "")
       data[i][dateCol - 1] = yestDate
 }
  sheet.getRange(2,1,data.length , data[0].length).setValues(data)
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2016-03-08
    相关资源
    最近更新 更多