我有两张纸的问题。一张是source spreadsheet,另一张是目标电子表格。源电子表格具有一个源表单,该表单具有主数据库,target spreadsheet的目标是我们要根据目标电子表格的“电子邮件”标签中提供的电子邮件从源表单中获取数据的目标。
我希望脚本执行以下操作,而不是IMPORTRANGE或QUERY:
目标电子表格将具有多个副本,因此我想根据源电子表格的ID将目标电子表格与源电子表格连接起来。
我希望电子邮件匹配不区分大小写,以便目标电子表格的用户在任何情况下都可以键入电子邮件。
电子邮件最多可以增加50条,或者说获得该列的最后一行。
如果脚本在提取数据后显示一个弹出式提示说“更新”,那就太好了。
源工作表可能包含多达15000行的数据,因此我也在考虑速度。
我共享了两个电子表格,并带有指向其名称的超链接。我不太擅长脚本,因此如果您可以在任意位置留下评论,将会很有帮助。非常感谢您的帮助。
谢谢!
此处脚本:
function fetch() {
//get the sheets
var source_Ssheet = SpreadsheetApp.openById('19FkL3rsh5sxdujb6x00BUPvXEEhiXfAeURTeQi3YWzo');
var target_Ssheet = SpreadsheetApp.getActiveSpreadsheet();
//get the tabs
var email_sheet = target_Ssheet.getSheetByName("Emails");
var target_sheet = target_Ssheet.getSheetByName("Target Sheet");
var source_sheet = source_Ssheet.getSheetByName("Source Sheet");
//get ranges
var email_list = email_sheet.getRange("B2:B");
var target_sheet_range = target_sheet.getRange("A1:F100");
var source_sheet_range = source_sheet.getRange("A1:F100");
//get last rows
var last_email_name = email_list.getLastRow();
var last_target_sheet_range = target_sheet_range.getLastRow();
var last_source_sheet_range = source_sheet_range.getLastRow();
//start searching for emails
for (var i=3; i < last_email_name.length+1; i++)
{
for(varj=3; j< last_source_sheet_range.length+1; j++ )
{
if(source_sheet_range[j][3].getValue() == email_list[i][3].getValue())
{
//copy matches to target sheet
target_sheet.getRange((last_target_sheet_range + 1),1,1,10).setValues(master_sheet_range[j].getValues());
}
}
}
}
答案 0 :(得分:0)
几件事
last_email_name
和last_source_sheet_range
是数字-它们没有长度,这就是为什么您的第一个for
循环不起作用的原因varj=3;
中缺少空格email_list[i][3].getValue()
不存在,因为email_list
仅包含B
-仅包含一列。我想你是说email_list[i][0].getValue()
[][]
寻址,您需要首先检索值以具有2D值范围。==
比较,您需要使用toLowerCase()
方法。getRange("B2:B")
会包含许多不需要的空行,这会使您的代码非常慢。通过getRange("B2:B" + email_sheet.getLastRow());
在这里查看调试后的代码-请记住,仍有很大的改进空间。
function fetch() {
//get the sheets
var source_Ssheet = SpreadsheetApp.openById('19FkL3rsh5sxdujb6x00BUPvXEEhiXfAeURTeQi3YWzo');
var target_Ssheet = SpreadsheetApp.getActiveSpreadsheet();
//get the tabs
var email_sheet = target_Ssheet.getSheetByName("Emails");
var target_sheet = target_Ssheet.getSheetByName("Target Sheet");
var source_sheet = source_Ssheet.getSheetByName("Source Sheet");
//get ranges
var email_list = email_sheet.getRange("B2:B" + email_sheet.getLastRow()).getValues();
var target_sheet_range = target_sheet.getRange("A1:F100").getValues();
var source_sheet_range = source_sheet.getRange("A1:F100").getValues();
var last_target_sheet_range = target_sheet.getLastRow();
//start searching for emails
for (var i=1; i < email_list.length; i++)
{
for(var j=1; j< source_sheet_range.length; j++ )
{
if(source_sheet_range[j][0].toLowerCase() == email_list[i][0].toLowerCase())
{
target_sheet.getRange((last_target_sheet_range + 1),1,1,6).setValues([source_sheet_range[j]]);
}
}
}
}