Lol*_*olo 2 google-sheets google-apps-script
这只是我在这里的第三篇文章。我从未编码,我没有技能,我只是想学习一些概念,以便我可以“修复”Google Apps 脚本。
问题:我想了解setFormula和setValue行为,为什么细胞值更新与否。
我正在使用UrlFetchApp.fetch从 URL 获取一些值并在单元格中设置该值。
我正在用setFormulaor写入值setValue。
这些功能是从工作表中的菜单手动触发的(未在下面的脚本中编码)
所以我从“Url”获取数据并将它们写在单元格上。
函数的第一次运行:
如果 URL 中的数据为:“A”,则:
-->setFormula写“A” -->setValue写“A”
函数的第二次运行:
URL中的数据从“A”变为“B”,则:
-->setFormula不覆盖单元格,仍然是“A” -->setValue用“B”覆盖“A”
我知道脚本正在按预期运行,完全没有问题。我只是想了解为什么setFormula从上次运行中“知道”单元格已经写入,因此它不会更新值。
这是解释问题的简短脚本。Url 值设置在工作表上, https://engaliao.com/html.htm 正如您在此图片中看到的那样
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{name: "Formula", functionName: "runFormula"},
{name: "SetValue", functionName: "runSet"}
];
sheet.addMenu("Menu", entries);
}
function runFormula() {
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
'hoja'
);
activeSheet.getRange(2, 2).setFormula('=RunCheck' + '(A2)');
}
function runSet() {
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
'hoja'
);
var workingCell = activeSheet.getRange(3, 1).getValue();
activeSheet.getRange(3, 2, 1, 1).setValue(RunCheck(workingCell));
}
function RunCheck(Url) {
var array = [];
var response = UrlFetchApp.fetch(Url);
if (response.getResponseCode() == 200) {
var content = JSON.parse(response.getContentText());
var score = content['loadingExperience']['id'];
}
array.push([score]);
return array;
}
Run Code Online (Sandbox Code Playgroud)
不需要外部提取来解释我的问题的新简化脚本:
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{name: "Formula", functionName: "runFormula"},
{name: "SetValue", functionName: "runSet"}
];
sheet.addMenu("Menu", entries);
}
function runFormula() {
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("hoja");
activeSheet.getRange(2, 2).setFormula("=RunCheck" + "(A2)");
}
function runSet() {
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("hoja");
var workingCell = activeSheet.getRange(3, 1).getValue();
activeSheet.getRange(3,2,1,1).setValue(RunCheck(workingCell));
}
function RunCheck(text) {
var array = [];
var number = (Math.random())
array.push([text + " " + number]);
return array;
}
Run Code Online (Sandbox Code Playgroud)
您的主张不可重复
我使用这些函数来测试您的声明,即如果 setForumula 在单元格中检测到某些内容,它不会更改公式,我发现无论它是否已被 setFormula 或 setValue 更改,它都会更新公式,并且实际上两者都会更新公式。
function setMyValue() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet40');
const v=sh.getActiveCell().getFormula();
sh.getRange('A1').setValue(v);
ss.toast(sh.getRange('A1').getFormula());
}
function setMyFormula() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet40');
const v=sh.getActiveCell().getFormula();
sh.getRange('A1').setFormula(v);
ss.toast(sh.getRange('A1').getFormula());
}
Run Code Online (Sandbox Code Playgroud)
那么如何分享您的菜单驱动功能。也许这就是问题所在。
动画片:
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |