使用谷歌应用程序脚本和电子表格,我一直在尝试做一件简单的事情,但无法弄清楚问题。我有一张工作表,一个空白列和一个带文字的列。列不是彼此相邻的。我试图在一列中的每个单元格中搜索文本,如果找到文本,则将空列中单元格的值设置为“是”。
示例(抱歉没有代码 - 我已经用了好几个小时了,而且我所拥有的是如此令人费解,最好只提供一个例子):
Column A with text Empty Column F
abcd efg hij
klmn opq rstu
vwxzy Yes
在A列中搜索“xyz”并在F列中返回“是”的最简单代码是什么?
我看过并在网上尝试了十几个不同的代码示例,并且无法让它们中的任何一个工作。感谢任何帮助!
编辑(最后希望)供我使用(我有一些后端实用工具,根据标题名称获取列号,该代码不包含在此,fyi):
var sskey = SpreadsheetApp.openById('**********************')
function otherfunction(){
addCustomValue('POCs', 'Groups', 'Champion', 'Champion', 'Yes');
}
function addCustomValue(sheetNamestr, searchColnamestr, writeColnamestr, searchKeystr, writeValstr) {
var sheet = sskey.getSheetByName(sheetNamestr);
var searchColnum = MyUtilities.getColIndexByName(sheet, 1, searchColnamestr);
var writeColnum = MyUtilities.getColIndexByName(sheet, 1, writeColnamestr);
var data = sheet.getDataRange().getValues();
for (n=0; n<data.length; ++n) {
if (data[n][searchColnum-1].toString().match(searchKeystr)==searchKeystr){ data[n][writeColnum-1] = writeValstr};
}
sheet.getRange(1,1,data.length,data[0].length).setValues(data);
}
谢谢Serge!现在我可以根据任何列和条件在我的电子表格上运行它了!
答案 0 :(得分:11)
这是一个可能的简单脚本,可以满足您的需求。 (如果您的工作表包含公式或自定义函数,则应对其进行修改以将其考虑在内)
function test(){
var sh = SpreadsheetApp.getActiveSheet();
var data = sh.getDataRange().getValues(); // read all data in the sheet
for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A
if(data[n][0].toString().match('xyz')=='xyz'){
// if column A contains 'xyz' then set value in index [5] (is column F)
data[n][5] = 'YES'
};
}
Logger.log(data)
sh.getRange(1,1,data.length,data[0].length).setValues(data); // write back to the sheet
}
答案 1 :(得分:3)
function myFunction() {
//Variable to keep track of the sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//Start at row 1, end at the last row of the spreadsheet
for(var i=1;i<sheet.getLastRow();i++){
var value = sheet.getRange(i, 1).getValue();
//Compare the value of the cell to 'xyz', if it is then set column 4 for that row to "Yes"
if(value == 'xyz'){
sheet.setActiveRange(sheet.getRange(i, 4)).setValue('Yes');
}
}
}