Javascript 根据其他工作表的值/验证选中ID复选框
以下是包含应用程序脚本的示例表: 我有一个主列表,跟踪是否发送了交易信函。3封信应该在交易日期后发送-初始交易日期后的第一个月、第三个月和第六个月,因此每个ID有3个复选框。如果发送了一封信,现在我会根据信的月份手动勾选一个复选框。我创建了第二个工作表,它将显示每个未选中的ID的所有最早日期,即单元格B2上的日期之前的日期。我的目标是,当我运行脚本时,它将勾选客户ID和日期匹配的所有对应复选框 以下是我当前的应用程序脚本代码:Javascript 根据其他工作表的值/验证选中ID复选框,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,以下是包含应用程序脚本的示例表: 我有一个主列表,跟踪是否发送了交易信函。3封信应该在交易日期后发送-初始交易日期后的第一个月、第三个月和第六个月,因此每个ID有3个复选框。如果发送了一封信,现在我会根据信的月份手动勾选一个复选框。我创建了第二个工作表,它将显示每个未选中的ID的所有最早日期,即单元格B2上的日期之前的日期。我的目标是,当我运行脚本时,它将勾选客户ID和日期匹配的所有对应复选框 以下是我当前的应用程序脚本代码: function myFunction() { var sh1
function myFunction() {
var sh1 = Sheets.Spreadsheets.Values.get('1AOzYMVqOqww4bUfSigDWz6gL6tmESfQxuKw4auNS4kU','Payment Due by Date!A4:D');
var sh2 = Sheets.Spreadsheets.Values.get('1AOzYMVqOqww4bUfSigDWz6gL6tmESfQxuKw4auNS4kU','Master List!A2:K');
for(var i = 0; i < sh1.values.length; i++){
var sh1Id = sh1.values[i][0]; //sheet1 ID
var sh1DD = sh1.values[i][2]; //sheet1 date
for(var j = 0; j < sh2.values.length; j++){
var sh2Id = sh2.values[j][0]; //sheet2 ID
var sh2m1d = sh2.values[j][3]; //sheet2 month1 date
var sh2m1c = sh2.values[j][4]; //sheet2 month1 checkbox
var sh2m3d = sh2.values[j][5]; //sheet2 month3 date
var sh2m3c = sh2.values[j][6]; //sheet2 month3 checkbox
var sh2m6d = sh2.values[j][7]; //sheet2 month6 date
var sh2m6c = sh2.values[j][8]; //sheet2 month6 checkbox
//Logger.log(sh2m1c);
//compare the ID & month and check the corresponding checkbox
if(sh1Id == sh2Id && sh1DD == sh2m1d)
sh2m1c = "TRUE";
else if(sh1Id == sh2Id && sh1DD == sh2m3d)
sh2m3c = "TRUE";
else if(sh1Id == sh2Id && sh1DD == sh2m6d)
sh2m6c = "TRUE";
}
}
}
函数myFunction(){
var sh1=Sheets.Spreadsheets.Values.get('1AOzYMVqOqww4bUfSigDWz6gL6tmESfQxuKw4auNS4kU','Payment by Date!A4:D');
var sh2=Sheets.Spreadsheets.Values.get('1AOzYMVqOqww4bUfSigDWz6gL6tmESfQxuKw4auNS4kU','Master List!A2:K');
对于(变量i=0;i
当我检查记录器时,循环是我认为得到了值(如果我错了,请纠正我)。我不知道我的循环是否运行不正确,或者我如何检查复选框是否错误
编辑:我的工作表中的一个具体示例,说明我正在尝试做什么:
如果在付款到期日,则该行存在
客户ID
客户名称
付款到期日
到期付款单
1042
汤姆,C
6/5/2020
第六个月到期
试试这个:
function myFunction() {
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Master List');
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Payment Due By Date');
var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
//Use getDisplayValues so the complier won't automatically convert the date based on timezone.
var sheet1_val = sheet1.getRange(2, 1, 12, 11).getDisplayValues();
//get Ids and merge into 1 dimensional array
var sheet1_ids = [].concat(...sheet1.getRange(2, 1, 12, 1).getDisplayValues());
var sheet2_val = sheet2.getRange(4,1,sheet2.getLastRow()-3, 4).getDisplayValues();
for(var i = 0; i < sheet2_val.length; i++){
var customer_id = sheet2_val[i][0];
var pay_due_date = sheet2_val[i][2];
//check if customer id exists in the id list (sheet1_ids)
if (sheet1_ids.indexOf(customer_id) !== -1) {
//get the position/index of the id
var index = sheet1_ids.indexOf(customer_id);
//I used 3 and 8 since we only need the column D-H
for(var j = 3; j < 8; j++){
//Iterate and check each column if match to the pay_due_date
if(pay_due_date == sheet1_val[index][j]){
//assign new value
sheet1_val[index][j+1] = "TRUE";
}
}
}
}
var lastRow = sheet1.getLastRow();
//merge subarrays with same index
var sheet1Transpose = transpose(sheet1_val);
var request = {
'valueInputOption': 'USER_ENTERED',
'data': [
{
'range': 'Master List!E2:E'+lastRow,
'majorDimension': 'COLUMNS',
'values': [sheet1Transpose[4]]
},
{
'range': 'Master List!G2:G'+lastRow,
'majorDimension': 'COLUMNS',
'values': [sheet1Transpose[6]]
},
{
'range': 'Master List!I2:I'+lastRow,
'majorDimension': 'COLUMNS',
'values': [sheet1Transpose[8]]
}
]
};
var response = Sheets.Spreadsheets.Values.batchUpdate(request, spreadsheetId);
}
function transpose(matrix) {
return matrix[0].map((col, i) => matrix.map(row => row[i]));
}
函数myFunction(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“主列表”);
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('到期付款日期');
var spreadsheetId=SpreadsheetApp.getActiveSpreadsheet().getId();
//使用getDisplayValues,使编译器不会基于时区自动转换日期。
var sheet1_val=sheet1.getRange(2,1,12,11).getDisplayValues();
//获取ID并合并到一维数组中
var sheet1_id=[].concat(…sheet1.getRange(2,1,12,1).getDisplayValues());
var sheet2_val=sheet2.getRange(4,1,sheet2.getLastRow()-3,4.getDisplayValues();
对于(变量i=0;imatrix.map(row=>row[i]);
}
注意:确保在服务中添加谷歌工作表
例子:
付款到期日:
之前:
之后:
参考: