如何解决循环遍历 2 个谷歌表
再见,
我有 2 张纸。对于 sheet1 上的每个 ID,我需要验证该 ID 是否也在 sheet2 上,以及 Date Processed 是否为空白。
如果两个条件都为真> 应在“处理日期”中设置今天的日期。
我已经设法为 sheet1 中的 1 个值 (A2) 做到了这一点。 我需要的是一种遍历 sheet1 中所有值的方法。理想情况下,sheet1 中的行也会被删除(不确定是否可能)
这是我目前的代码
function mymatch(){
var file = SpreadsheetApp.getActiveSpreadsheet();
var ss = file.getSheetByName("Sheet1");
var ws = file.getSheetByName("Sheet2");
var wsData = ws.getDatarange().getValues();
var mySearch = ss.getRange("A2").getValue();
for(var i = 0; i < wsData.length; i++){
if(wsData[i][1] == mySearch && wsData[i][2] == "")
{
ws.getRange(i+1,3).setNumberFormat('dd"-"mmm"-"yyyy').setValue(new Date());
}
}
}
非常感谢您的帮助,因为我已经尝试并寻找解决方案 2 天了。谢谢
解决方法
我知道这没有多大意义。 Muhammet 的代码工作正常,看起来很好。但是,出于娱乐和教育目的,这里有另一个“功能性”解决方案:
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const s1 = ss.getSheetByName('Sheet1');
const s2 = ss.getSheetByName('Sheet2');
// get data from Sheet1 and Sheet2
const s1_data = s1.getDataRange().getValues().slice(1,);
const s2_data = s2.getDataRange().getValues().slice(1,);
// get IDs from data of Sheet1
const IDs = s1_data.map(x => x[0]);
const IDs_to_delete = []; // here will be IDs to delete
// function checks and fill a row and adds ID to array to delete
const write_date = (id,row) => {
if (row[1] == id && row[2] == '') {
IDs_to_delete.push(id);
row[2] = new Date();
}
}
// change rows within data of Sheet 2
IDs.forEach(id => s2_data.forEach(row => row = write_date(id,row)));
// clear and fill Sheet 2
s2.getDataRange().offset(1,0).clearContent();
s2.getRange(2,1,s2_data.length,s2_data[0].length).setValues(s2_data);
// remove rows from data of Sheet 1
const s1_data_new = s1_data.filter(row => !IDs_to_delete.includes(row[0]));
// clear and fill Sheet 1 with new data
s1.getDataRange().offset(1,0).clearContent();
s1.getRange(2,s1_data_new.length,s1_data_new[0].length).setValues(s1_data_new);
}
对 Muhamed 代码的唯一改进是此实现从 Sheet1 中删除了已处理的行。而且,我相信,对于巨大的列表,它会更快地工作,因为它不会在每个找到的单元格上使用 getRange()
和 setValue()
,而是使用 setValues()
方法一次填充工作表的所有单元格.
你需要一个循环。使用
var mySearchs = ss.getRange('A2:A').getValues();
并遍历该数组的所有值。
function myMatch(){
var file = SpreadsheetApp.getActiveSpreadsheet();
var ss = file.getSheetByName("Sheet1");
var ws = file.getSheetByName("Sheet2");
var wsData = ws.getDataRange().getValues();
var mySearchs = ss.getRange('A2:A').getValues();
mySearchs.forEach((v) => {
for(var i = 0; i < wsData.length; i++){
if(wsData[i][1] == v && wsData[i][2] == "")
{
ws.getRange(i+1,3).setNumberFormat('dd"-"mmm"-"yyyy').setValue(new Date());
}
}
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。