我做了很长时间的搜索,无法找到我要找的东西。也许有人在那里可以帮忙吗?
我有两个Google Spreadsheets,Spread1和Spread2。我只会提到两个电子表格的sheet1。
我需要一个脚本来删除Spread1的B列中包含“Hello”的行,但只有在Spread2的B列中出现“Hello”时才会这样。
如果删除行(如果两列中都出现相同的单词),那么我希望脚本返回Spread2并删除B列中带有“Hello”的行。
因此,在脚本运行后,任何一个电子表格中的B列都不会显示“Hello”。
如果有人知道如何实现这一目标,我将非常感激 - 非常感谢您的宝贵帮助。
感谢您的期待!
编辑:
我有这个脚本删除Spread2中包含B列中“hello”的行:
function deleteRow() {
var ss = SpreadsheetApp.openById("SPREADSHEET KEY");
SpreadsheetApp.setActiveSpreadsheet(ss);
var s = ss.getSheetByName('Sheet1'); // change to your own
var values = s.getDataRange().getValues();
for( var row = values.length -1; row >= 0; --row )
if (values[row][1] == 'Hello')
s.deleteRow(parseInt(row)+1);
};
但我只希望它在Spread1的B列中出现“Hello”时这样做。有任何想法吗?感谢
答案 0 :(得分:1)
您可以在同一脚本中引用这两个电子表格,并在步骤
中处理这两个数组function deleteRow() {
var ss = SpreadsheetApp.openById("SPREADSHEET KEY");
SpreadsheetApp.setActiveSpreadsheet(ss);
var s = ss.getSheetByName('Sheet1'); // change to your own
var values = s.getDataRange().getValues();
var ss1 = SpreadsheetApp.openById("SPREADSHEET KEY1");
var s1 = ss1.getSheetByName('Sheet1');
var values1 = s1.getDataRange().getValues();
// assumes sheets have same number of rows and you wish to delete corresponding rows in each
for( var row = values.length -1; row >= 0; --row )
if (values[row][1] == 'Hello' || values1[row][1] == 'Hello')
s.deleteRow(parseInt(row)+1); // parseInt is not required
s1.deleteRow(parseInt(row)+1);
};
答案 1 :(得分:1)
为了简化此解决方案,我使用2D Array Library作为ArrayLib.find()
。你可以编写一个循环遍历sheet2中的行的函数来找到'Hello'。
function deleteRow() {
// This assumes script is independent of either sheet
var s1 = SpreadsheetApp.openById("SPREADSHEET KEY1").getSheetByName('Sheet1');
var s2 = SpreadsheetApp.openById("SPREADSHEET KEY2").getSheetByName('Sheet1');
var values1 = s1.getDataRange().getValues();
var values2 = s2.getDataRange().getValues();
// Check if "Hello" appears in column B of Spread2.
if (ArrayLib.find(values2, 1, 'Hello') != -1) {
// Yes it does, so delete rows containing "Hello" in column B of Spread1
for( var row = values.length -1; row >= 0; --row )
if (values1[row][1] == 'Hello')
s1.deleteRow(parseInt(row)+1);
}
}
}
您可以通过删除对deleteRow()
的调用,以数组形式修改Spread1,然后调用clearContent()
和setValues()
将修改后的数组写回工作表来进一步优化此操作。这样,您将n
服务调用替换为2,并节省大量运行时间。