【问题标题】:How to make google sheet script Ignore fields with formulas如何制作谷歌工作表脚本忽略带有公式的字段
【发布时间】:2025-11-27 18:20:03
【问题描述】:

我已经构建了一个运行良好的脚本,但是为了可用性,我想通过公式填充查询的字段以构建有效负载。

问题:如果我有没有值但公式的字段,脚本将空值发送到 api 导致错误停止后续功能。

如果我手动设置包含公式的字段数组,它可以工作。

我正在寻找的解决方案:我的脚本的代码行,在遇到带有公式而不是值的字段时中断。

我希望这个问题/问题很清楚。

我试过这段代码,但它不起作用:

for (var i = 1; i < data_statistics.length; i++) {
    if (data_statistics[i] === undefined) {
      break;
    }
    else if (data_statistics[i][0].includes("=")) {
      break;
    }

这是工作函数:

function Mean(){
  
  var sheet_statistics = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Mean") 
  var data_statistics = sheet_statistics.getDataRange().getValues();
  
  var token = _requestToken();
  
  var col_start = 2
  
  for (var i = 1; i < data_statistics.length; i++) {
    if (data_statistics[i] === undefined) {
         break;
    }
   
    
    // Build payloads and apply small sanity checks payload specific
    
    // Payload same typo
    var payload = Object();
    for (var j = col_start; j < data_statistics[0].length; j++) {
      _buildPayload(payload, data_statistics[0][j].split('.'), data_statistics[i][j]);
    }
    payload.filters.divisionLevel100 = String(payload.filters.divisionLevel100);
    
    // Get statistics
    var statistics = _getOfferStatistics(token, payload)
    
    // Set statistics values in cells
    sheet_statistics.getRange(i+1, 1).setValue(statistics.metric)
        
    sheet_statistics.getRange(i+1, 2).setValue(statistics.value)

【问题讨论】:

  • data_statistics 是一个二维数组,因此您需要 2 个索引来指定单个单元格
  • 您可以使用 getFormulas() 获取公式数组。如果该数组中的给定单元格不为空,则该单元格是一个公式,因此您可以使用该单元格的公式,当使用 setValues() 时,公式将插入指定范围
  • 您好 Cooper,感谢您如此迅速地回答。我实际上不想将公式插入单元格,我在执行脚本之前使用公式填充字段 - 但是由于数据长度(需要的行数)不同,我基本上需要脚本不仅在空时中断字段(未定义),但也适用于只有公式的字段? - 我编辑了这个问题,因为它不清楚:D
  • 使用getFormulas()判断哪些单元格有公式

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


【解决方案1】:
  const data_statistics_rg = sheet_statistics.getDataRange(),
  data_statistics = data_statistics_rg.getValues(),
  data_statistics_formulas = data_statistics_rg.getFormulas();
  
  for (var i = 1; i < data_statistics.length; i++) {
    if (data_statistics[i] === undefined) {
         break;
    }
    else if (!data_statistics_formulas[i][0].includes("")) {
         break;
    }
        

【讨论】:

  • 谢谢大师,我会试试这个,但发现 data_statistics_rg 已经存在问题
  • 感谢@TheMaster,这段代码在几周后就可以工作了。大力支持!
  • @CS05 考虑通过单击答案左侧的复选框来接受答案。