首页 > 解决方案 > 如何删除单元格并在 Google 表格中重新输入相同的详细信息

问题描述

我目前正在开发一种方法来自动获取股票价格的数据..

起初,我认为要更新单元格的值,我只需要刷新单元格中的 importxml 语句即可。所以我使用了定期刷新 IMPORTXML() 电子表格函数中的这段代码

function RefreshImports() {
  var lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) return;             // Wait up to 5s for previous refresh to end.
  // At this point, we are holding the lock.

  var id = "YOUR-SHEET-ID";
  var ss = SpreadsheetApp.openById(id);
  var sheets = ss.getSheets();

  for (var sheetNum=0; sheetNum<sheets.length; sheetNum++) {
    var sheet = sheets[sheetNum];
    var dataRange = sheet.getDataRange();
    var formulas = dataRange.getFormulas();
    var tempFormulas = [];
    for (var row=0; row<formulas.length; row++) {
      for (col=0; col<formulas[0].length; col++) {
        // Blank all formulas containing any "import" function
        // See https://regex101.com/r/bE7fJ6/2
        var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
        if (formulas[row][col].search(re) !== -1 ) {
          tempFormulas.push({row:row+1,
                             col:col+1,
                             formula:formulas[row][col]});
          sheet.getRange(row+1, col+1).setFormula("");
        }
      }
    }

    // After a pause, replace the import functions
    Utilities.sleep(5000);
    for (var i=0; i<tempFormulas.length; i++) {
      var cell = tempFormulas[i];
      sheet.getRange( cell.row, cell.col ).setFormula(cell.formula)
    }

    // Done refresh; release the lock.
    lock.releaseLock();
  }
}

显然,它不会更新单元格..所以我发现要刷新单元格,我需要

  1. 删除股票名称
  2. 重新输入股票名称

这是一个视频,显示了我的意思(只是为了说清楚) https://streamable.com/eciks0

我怎样才能自动化这个,也许使用谷歌表脚本?

谢谢你


编辑:这是我正在使用的谷歌表的副本

https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing

请尝试复制它。

再次感谢您的帮助

标签: xmlgoogle-apps-scriptgoogle-sheets

解决方案


从您的示例视频中,在您的情况下,我认为当单元格“B9”和“B10”的值包含在公式url中时,当单元格“B1”的值发生更改时,公式会被刷新。那么,下面的示例脚本怎么样?xpath=IMPORTXML(url, xpath)

示例脚本:

请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中,然后运行myFunction​​. 在此示例脚本中,单元格“B1”的值被 覆盖newValue

function myFunction() {
  var newValue = "###"; // Please set the new value.
  var sheetName = "Sheet1";  // Please set the sheet name.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  sheet.getRange("B1").setValue(newValue);
}
  • 如果上面的脚本没有用,并且当您想在您的问题中也使用您的脚本时,您可以使用以下脚本。在这种情况下,请根据var id = "YOUR-SHEET-ID";您的实际情况进行设置。

      function myFunction() {
        var newValue = "###"; // Please set the new value.
        var sheetName = "Sheet1";  // Please set the sheet name.
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
        sheet.getRange("B1").setValue(newValue);
        RefreshImports(); // <--- Added
      }
    
  • 或者,我认为您可以使用以下脚本来刷新工作表中的公式。

      function myFunction2() {
        var newValue = "###"; // Please set the new value.
        var sheetName = "Sheet1";  // Please set the sheet name.
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
        sheet.getRange("B1").setValue(newValue);
    
        var formula = "=";
        var tempFormula = "=sample";
        sheet.createTextFinder(`^\\${formula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula);
        sheet.createTextFinder(`^\\${tempFormula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
      }
    

参考:

添加:

从您的回复和分享的视频来看,下面的示例脚本怎么样?在这种情况下,作为一个简单的脚本,单元格被清除并acen再次输入值。

示例脚本:

function myFunction() {
  var newValue = "acen"; // Please set the new value.
  var sheetName = "Sheet1";  // Please set the sheet name.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var range = sheet.getRange("B1");
  range.clearContent();
  SpreadsheetApp.flush();
  range.setValue(newValue);
}

推荐阅读