首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你能追踪谷歌单张中的一个单元格有多长时间了吗?

你能追踪谷歌单张中的一个单元格有多长时间了吗?
EN

Web Applications用户
提问于 2022-08-27 08:36:21
回答 1查看 66关注 0票数 2

我正在用这张谷歌单子制作一份经过过滤的贸易提案清单。我想删除那些已经放在网上在过去5-10分钟,只显示较老的。我想避免在私人安排中做广告。

该工作表现在每5分钟从带有IMPORTHTML的网站中提取一张表。我使用一个app脚本来增加一个值,该值稍微改变IMPORTHTML函数,使其强制进行更新。在另一张纸上有一个过滤器函数,我会删除所有那些不感兴趣的交易。

我如何能够检查由IMPORTHTML导入的单元格的内容在更新期间是否保持不变?

我不知道我有什么选择。我被限制在什么是免费使用,不需要我的电脑连接。

EN

回答 1

Web Applications用户

发布于 2022-09-04 06:28:34

一种方法是在新的“交易存档”表中创建一个增量交易存档,如下所示:

代码语言:javascript
运行
复制
/**
* Run this function through an installable trigger every 10 minutes.
*
* @param {Object} e The event object (unused.)
*/
function timeTrigger(e) {
  refreshImportHtml_();
  archiveData_();
}


/**
* Increments a counter to force importhtml() to update.
*/
function refreshImportHtml_() {
  const cell = SpreadsheetApp.getActive().getRange('trades!M3');
  cell.setValue((Number(cell.getValue()) || 0) + 1);
  SpreadsheetApp.flush();
}


/**
* Appends rows from 'trades!A2:F' to 'trades archive' provided that
* an identical row does not already appear there.
* Each row is prefixed with a timestamp.
*/
function archiveData_() {
  // version 1.0, written by --Hyde, 4 September 2022
  //  - see https://webapps.stackexchange.com/a/166441/269219
  const timestamp = new Date();
  const ss = SpreadsheetApp.getActive();
  const source = { range: ss.getRange('trades!A2:F') };
  const target = { sheetName: 'trades archive' };
  target.sheet = ss.getSheetByName(target.sheetName);
  if (!target.sheet) {
    target.sheet = ss.insertSheet(target.sheetName).appendRow(['Timestamp', 'Data']);
    target.sheet.setFrozenRows(1);
  }
  target.range = target.sheet.getRange(source.range.getA1Notation()).offset(0, 1);
  target.keys = target.range.getValues().map(row => row.join(''));
  source.range.getValues().forEach(row => {
    const sourceKey = row.join('');
    if (sourceKey && !target.keys.includes(sourceKey)) {
      target.sheet.appendRow([timestamp].concat(row));
    }
  });
}

新的表将包含一个不断增加的时间标记的名单,所有的交易已经公布。

然后插入>工作表,将新工作表命名为“交易新”,并将此公式放入单元格

代码语言:javascript
运行
复制
=filter( 
  trades!A2:J, 
  len(trades!A2:A), 
  match( 
    transpose(query(transpose(trades!A2:F), "", 9^9)), 
    transpose(query(transpose('trades archive'!B2:G), "", 9^9)), 
    0 
  ) 
)

中:

A2

公式将在“交易”中显示行,但前提是它们也出现在“交易存档”中。换句话说,它忽略了比已经归档的行更近的行。

最后,修改'Filtered list'!A2中的公式如下:

代码语言:javascript
运行
复制
=filter('trades new'!A2:F, 'trades new'!I2:I = 0)

请注意,此解决方案将每十分钟“重置”一次,每次从零开始缓冲时间。按照您的要求,要获得至少5分钟的缓冲时间,请使用以下公式:

代码语言:javascript
运行
复制
=filter( 
  'trades archive'!B2:G, 
  isnumber('trades archive'!A2:A), 
  'trades archive'!A2:A <= now() - 5 / 60 / 24, 
  match( 
    transpose(query(transpose('trades archive'!B2:G), "", 9^9)), 
    transpose(query(transpose(trades!A2:F), "", 9^9)), 
    0 
  ) 
)

这个公式的作用正好相反,它将在“交易存档”中显示行,但前提是它们也出现在“交易”中,而且只有在它们存在超过5分钟的情况下才能显示。缺点是,需要输入数组公式才能获得要显示的其他计算列。

票数 0
EN
页面原文内容由Web Applications提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://webapps.stackexchange.com/questions/166297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档