Google 电子表格 - 来自依赖于另一个脚本的列的快照值

Google spreadsheet - Snapshot values from a columnt that depend on another script

我有一个电子表格,它使用另一个外部脚本 (https://github.com/Eloise1988/CRYPTOBALANCE) 的函数从钱包中获取余额。

我想每天在另一列上对该值进行快照,因此我创建了以下脚本:

function snapshot() {
  SpreadsheetApp.flush()

  // Assign 'dashboard' the Dashboard sheet.
  var Carteiras = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Carteiras');

  attempts = 0;
  while (
    (Carteiras.getRange("C2:C2").getValue() === '#NAME'
    || Carteiras.getRange("C2:C2").getValue() === "#NAME?" 
    || Carteiras.getRange("C2:C2").getValue() === 'Loading...'
    || Carteiras.getRange("C2:C2").getValue() === 'Contact for BALANCE : t.me/TheCryptoCurious')
    && attempts < 60
  ) {
    console.log('Formula is not yet ready... re-attempting in 1seg');
    console.log('C2 value is ', Carteiras.getRange("C2:C2").getValue());
    Utilities.sleep(1000)
    attempts++;
  }

  console.log('C2 value is ', Carteiras.getRange("C2:C2").getValue());

  if (attempts < 60) {
    Carteiras.getRange("D2:D23").setValues(Carteiras.getRange("C2:C23").getValues());
    console.log('Values updated successfully!');
  } else {
    console.error('Failed to grab the formula values.');
  }
}

这个脚本基本上是试图从钱包中获取余额(列 C2:C),我知道一旦 C2 被加载,所有其他的也被加载,所以我正在检查 C2 是否有效状态(例如:未加载、没有#Name 或其他任何内容)

我已经在每天早上(上午 10 点到上午 11 点)为 运行 这个快照功能设置了一个时间驱动触发器 -- 问题是该列总是在 #NAME?

我认为在某些时候 google 不允许此其他外部脚本 运行,任何想法如何确保如何 运行 此其他脚本?

也欢迎对我的代码进行任何改进,因为我从未在 google 电子表格上做过任何事情。

赞赏!

不要尝试从电子表格中读取自定义函数的结果,而是将自定义函数作为“正常”函数调用。

function snapshot(){
   const spreadsheet = SpreadsheetApp.getActiveSpreadshet();
   var Carteiras = spreadsheet.getSheetByName('Carteiras');
   const values = Carteiras.getRange("C2:C23").getValues();
   const balance = values.map(row => {
     const ticker = 'a-ticker'; // or use row[some-index-1] or other way to get the ticker
     const address = 'a-address'; // or use row[some-index-2] or other way to get the address
     const refresh_cell = null; // not needed in this context
     return [CRYPTOBALANCE(ticker,address, refresh_cell)]
   }); 
 
   Carteiras.getRange("D2:D23").setValues(balance);
}

以上是因为 Google Apps Script 官方文档没有披露当电子表格被脚本打开时公式重新计算的确切工作原理,而电子表格还没有被活动用户首先打开,这通常发生在每天执行 time-driven 触发器。我猜当 Google Sheets web client-side 代码触发公式重新计算时,自定义函数被加载到活动电子表格函数列表中。

相关

  • Custom formula returning #NAME when Google Sheets is published to web
  • Google Sheet Script Returning #NAME?
  • Why am I getting #NAME? retrieving google sheets cell values that depend on custom functions via API?
  • Google sheets custom function data disappears when viewing site as html after 20 minutes