arrays - 谷歌工作表中的两个活动工作表基于单元格比较更新错误
问题描述
我试图让这段代码工作,但我知道我错过了一些东西。代码应该做的是:使用另一个工作表引用从另一个单元格中查找特定文本,因此下面的谷歌工作表中有两个工作表:'BSR DATA'和'ENTRY FORM'。从 ENTRY FORM 开始,单元格 g6 会将其数据与 BSR DATA 的第一列进行比较,如果符合条件,它将使用“新值”更新数组/单元格引用的特定行。
function UpdateBSRSpecial()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var testForm = ss.getSheetByName("ENTRY FORM");
var testTable = ss.getSheetByName("BSR DATA");
var testFormValue = testForm.getRange("G6").getValue();
var rangeData = testTable.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
for(var i=0;i>lastRow;i++){
var dataID = testForm.getRange(i,1).getValue();
if(testFormValue == dataID)
{
testTable.getRange(i,6).setValue("new value");
};
};
};
解决方案
现有脚本正在更新所有行,因为它循环使用for(var i=0;i>lastRow;i++){
. 以下脚本演示了搜索离散术语的过程。
我不打算处理“新价值”的更新,因为这在问题中并不清楚。
需要注意的方面
- 该脚本获取 BSR - 上的所有数据
var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues();
。这可以在稍后更新值时使用。 - 使用 Javascript map方法,将 A 列提取为单独的数组以进行搜索 -
var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
- 搜索是使用 Javascript indexOf方法进行的。注意:如果找到匹配项,则该方法返回数组中搜索词的索引号;如果未找到匹配项,则该方法返回“-1”。
- 脚本测试以查看搜索是否成功:
if (result !=-1){
indexOf
返回一个从零开始的索引,因此实际的行号是索引加一:var row = result+1;
function so5866895401() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formsheetname = "ENTRY FORM";
var form = ss.getSheetByName(formsheetname);
var bsrname = "BSR DATA";
var bsr = ss.getSheetByName(bsrname);
// get input cell on form
var searchterm = form.getRange("G6").getValue();
// Logger.log(searchterm);// DEBUG
//get data from BSR
var bsrLR = bsr.getLastRow();
var bstLC = bsr.getLastColumn();
var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues();
// get column A of BSR
var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
// Logger.log(bsrColA);// DEBUG
// search for the searchterm in ColumnA of BSR
var result = bsrColA.indexOf(searchterm); // zero-based
if (result !=-1){
var row = result+1;
Logger.log("result = "+result+", row = "+row);
}
}
推荐阅读
- reactjs - Redux Observables + Jest:EventEmitter 事件监听器未触发
- c# - 如何创建自定义设置 msi 包/wix 工具集/自定义操作
- arrays - Angular 7,如何使用 Sort() 方法对 Observable 数组进行排序
- python - 如何检查字典的两个值是否存在于同一索引中?
- pdf - Flutter for Web 可以显示 Pdf 或 Webview 吗?
- python-3.x - Keras:在 Jupyter Notebook 中显示模型形状
- file - 有没有办法将单个文件一个接一个地提供给 Jenkins 作业,以便它对这些文件采取行动?
- swift - 如果未经过身份验证,则重定向到情节提要
- hyperledger-sawtooth - Hyperledger Sawtooth:如何检索更改特定状态的交易?
- python - 为什么这个库不能使用 ctypes 加载?