gpt4 book ai didi

google-apps-script - 尝试了解 setFormula 与 setValue 行为

转载 作者:行者123 更新时间:2023-12-04 06:43:39 36 4
gpt4 key购买 nike

这只是我的第三篇文章。我从未编码过,没有任何技能,我只是想学习一些概念,以便可以“修复”Google Apps 脚本。

问题:我想了解setFormulasetValue行为,以及单元格值更新或不更新的原因。

我正在使用UrlFetchApp.fetch从 URL 获取一些值并在单元格中设置该值。

我正在用 setFormula 写入值或setValue .

这些功能是从工作表中的菜单手动触发的(未在下面的脚本中编码)

所以我从“Url”获取数据并将它们写入单元格。

首次运行该函数:

如果 URL 中的数据为:“A”,则:

--> setFormula写“A”--> setValue写“A”

第二次运行该函数:

URL 中的数据已从“A”更改为“B”,则:

--> setFormula不覆盖单元格,它仍然是“A”--> setValue用“B”覆盖“A”

我知道脚本正在按预期运行,没有任何问题。我只是想知道为什么setFormula从上次运行中“知道”该单元格已被写入,因此它不会更新该值。

这是一个解释问题的简短脚本。 Url 值在工作表上设置,为 https://engaliao.com/html.htm正如你在这张图片中看到的

enter image description here


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;
}

新的简化脚本,不需要外部获取来解释我的问题:

enter image description here

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;
}

最佳答案

您的主张无法重现

我使用这些函数来测试您的说法,即如果 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());
}

那么分享一下菜单驱动的功能怎么样?也许这就是问题所在。

动画:

enter image description here

关于google-apps-script - 尝试了解 setFormula 与 setValue 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62231230/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com