在 Google 表格中,如何将基于特定列值的行复制到新选项卡中,然后将复选框附加到该行?
In Google Sheets, how can I copy a row based on a specific column value into a new tab, and then append checkboxes to the row?
我正在尝试编写一个脚本,允许我根据特定的单元格值将一行复制到新选项卡中。在这种情况下,它是一个设置为 TRUE 的复选框。
我可以根据单元格值将行复制到新的 sheet,但现在我不确定如何使用 insertCheckboxes
将 5 个复选框附加到在新 sheet.
中复制行
这是我目前的代码:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Client Database" && r.getColumn() == 9 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Referrals");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
第 9 列包含复选框,当设置为 true 时,会将行从“客户数据库”复制到我的新选项卡(“推荐”)。
我正在为两件事挠头:
- 我需要在代码中更改什么才能仅复制原始 sheet 中的第 1 列和第 4 列? (因为它当前正在复制行中的所有列)。
- 除非有更简单的解决方法,否则如何使用
insertCheckboxes
将复选框附加到新 sheet 中的相邻列中? (下图)。这只是为了避免每次都手动插入框(因为我不会是使用 sheet) 的人
非常感谢任何建议。
复选框
添加到您的脚本
var checkbox = SpreadsheetApp.newDataValidation().requireCheckbox().build();
targetSheet.getRange(targetRow,3,1,4).setDataValidation(checkbox).setValue("FALSE");
其中 targetRow 是行,targetSheet sheet 您复制的地方
代码
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if (s.getName() == "Client Database" && r.getColumn() == 9 && r.getValue() == true) {
var row = r.getRow();
var targetSheet = ss.getSheetByName("Referrals");
targetSheet.insertRowBefore(2)
var targetRow = 2
targetSheet.getRange(targetRow,1).setValue(s.getRange(row,1).getValue())
targetSheet.getRange(targetRow,2).setValue(s.getRange(row,4).getValue())
var checkbox = SpreadsheetApp.newDataValidation().requireCheckbox().build();
targetSheet.getRange(targetRow,3,1,4).setDataValidation(checkbox).setValue("FALSE");
}
}
我正在尝试编写一个脚本,允许我根据特定的单元格值将一行复制到新选项卡中。在这种情况下,它是一个设置为 TRUE 的复选框。
我可以根据单元格值将行复制到新的 sheet,但现在我不确定如何使用 insertCheckboxes
将 5 个复选框附加到在新 sheet.
这是我目前的代码:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Client Database" && r.getColumn() == 9 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Referrals");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
第 9 列包含复选框,当设置为 true 时,会将行从“客户数据库”复制到我的新选项卡(“推荐”)。
我正在为两件事挠头:
- 我需要在代码中更改什么才能仅复制原始 sheet 中的第 1 列和第 4 列? (因为它当前正在复制行中的所有列)。
- 除非有更简单的解决方法,否则如何使用
insertCheckboxes
将复选框附加到新 sheet 中的相邻列中? (下图)。这只是为了避免每次都手动插入框(因为我不会是使用 sheet) 的人
非常感谢任何建议。
复选框
添加到您的脚本
var checkbox = SpreadsheetApp.newDataValidation().requireCheckbox().build();
targetSheet.getRange(targetRow,3,1,4).setDataValidation(checkbox).setValue("FALSE");
其中 targetRow 是行,targetSheet sheet 您复制的地方
代码
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if (s.getName() == "Client Database" && r.getColumn() == 9 && r.getValue() == true) {
var row = r.getRow();
var targetSheet = ss.getSheetByName("Referrals");
targetSheet.insertRowBefore(2)
var targetRow = 2
targetSheet.getRange(targetRow,1).setValue(s.getRange(row,1).getValue())
targetSheet.getRange(targetRow,2).setValue(s.getRange(row,4).getValue())
var checkbox = SpreadsheetApp.newDataValidation().requireCheckbox().build();
targetSheet.getRange(targetRow,3,1,4).setDataValidation(checkbox).setValue("FALSE");
}
}