xml - 如何删除单元格并在 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();
}
}
显然,它不会更新单元格..所以我发现要刷新单元格,我需要
- 删除股票名称
- 重新输入股票名称
这是一个视频,显示了我的意思(只是为了说清楚) https://streamable.com/eciks0
我怎样才能自动化这个,也许使用谷歌表脚本?
谢谢你
编辑:这是我正在使用的谷歌表的副本
https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing
请尝试复制它。
再次感谢您的帮助
解决方案
从您的示例视频中,在您的情况下,我认为当单元格“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);
}
推荐阅读
- python - 来自输出的表情符号在 Windows 和 Linux 上是不同的
- c++ - 填充 __m128i 参数的正确方法是什么,从基本类型(例如 short)到与 _mm256_broadcast_epi 一起使用(例如 _mm_broadcastw_epi16)
- bash - 登录站点并使用 cURL 下载文件
- sql - spark sql第二次运行同一个查询速度更快,如何让查询时间稳定?
- javascript - 如何在javascript中拖动时更改自动滚动“开始区域”?
- java - 尝试使用 ACTION_VIEW 打开文件时在 android 11 上找不到媒体
- hibernate - Jpa Join 查询与来自两个表的数据,org.hibernate.MappingException:没有 JDBC 类型的方言映射:2002
- javascript - 为什么 nextelementsibling 返回 null | dom遍历js
- ajax - laravel 和 sweetalert 并重定向到
- php - 遍历一个txt文件中的所有数字,看第一个和最后一个数字是否相同