动态下拉设置为自动填充下一列
Dynamic dropdown set to autofill next column
我工作的公司有大量数据存储在 Google 表格中,许多不同的人都可以访问它并具有编辑权限。为了帮助保持一致,我在整个 sheet 中设置了一些 formulas/scripts。
我目前遇到的问题基本上是一个脚本,它将 运行 一个 IF 公式并在其前面的单元格等于特定值时显示一个设定值。因此,K 列有一个由 A1:I1 范围组成的数据验证下拉列表,如果我 select 一个值,它只需要显示该范围正下方单元格中的任何数据。我知道这可以通过一个简单的 VLOOKUP 来完成,但如果没有必要,我宁愿不这样做。我当前的脚本是这样的:
function onEdit(){
var tabPhase = "Authenticated";
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var dataYear = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabPhase);
var activeCell = spreadSheet.getActiveCell();
if(activeCell.getColumn() == 11 && activeCell.getRow() > 1 && spreadSheet.getSheetName() == tabPhase){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var makes = dataYear.getRange(1, 1, 1, dataYear.getLastColumn()).getValues();
var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
if(makeIndex != 0){
var validationRange = dataYear.getRange(3, makeIndex, dataYear.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}
它几乎完美地工作,我 运行 遇到的唯一问题是 L 列中的单元格然后输出数据验证。
我也能够使用嵌套的 if 语句使它工作,但是我不确定如何从单元格中提取而不是仅仅让它显示以前设置的数据。这是代码:
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var aSheet = ss.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
var aValue = aCell.getValue()
if (aColumn == 1 && aSheet.getName() == 'Authenticated Ranges') {
var matchCell = aSheet.getRange(aRow, aColumn).getValue()
if(matchCell == "A1")
licenseTypeCell.setValue("A2");
if(matchCell == "B1")
licenseTypeCell.setValue("B2");
if(matchCell == "C1")
licenseTypeCell.setValue("C2");
if(matchCell == "D1")
licenseTypeCell.setValue("D2");
}
}
我可以更改什么以使其仅显示第二行中的值而不是当前显示的数据验证范围?
在花费了太多时间之后,我最终弄明白了这一点。任何简化这一点的建议当然是受欢迎的,因为我知道这段代码只是功能性的而不是很漂亮!
function onEdit() {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var aSheet = app.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
var targetSheet = app.getActiveSpreadsheet().getSheetByName("Authenticated");
var A1 = targetSheet.getRange(2,1).getValue();
var B1 = targetSheet.getRange(2,2).getValue();
var C1 = targetSheet.getRange(2,3).getValue();
var D1 = targetSheet.getRange(2,4).getValue();
var E1 = targetSheet.getRange(2,5).getValue();
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
var aValue = aCell.getValue()
if (aColumn == 16 && aSheet.getName() == 'Master') {
var matchCell = aSheet.getRange(aRow, aColumn).getValue()
if(matchCell == "A1")
licenseTypeCell.setValue(A1);
if(matchCell == "B1")
licenseTypeCell.setValue(B1);
if(matchCell == "C1")
licenseTypeCell.setValue(C1);
if(matchCell == "D1")
licenseTypeCell.setValue(D1);
if(matchCell == "E1")
licenseTypeCell.setValue(E1);
}
}
我工作的公司有大量数据存储在 Google 表格中,许多不同的人都可以访问它并具有编辑权限。为了帮助保持一致,我在整个 sheet 中设置了一些 formulas/scripts。
我目前遇到的问题基本上是一个脚本,它将 运行 一个 IF 公式并在其前面的单元格等于特定值时显示一个设定值。因此,K 列有一个由 A1:I1 范围组成的数据验证下拉列表,如果我 select 一个值,它只需要显示该范围正下方单元格中的任何数据。我知道这可以通过一个简单的 VLOOKUP 来完成,但如果没有必要,我宁愿不这样做。我当前的脚本是这样的:
function onEdit(){
var tabPhase = "Authenticated";
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var dataYear = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabPhase);
var activeCell = spreadSheet.getActiveCell();
if(activeCell.getColumn() == 11 && activeCell.getRow() > 1 && spreadSheet.getSheetName() == tabPhase){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var makes = dataYear.getRange(1, 1, 1, dataYear.getLastColumn()).getValues();
var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
if(makeIndex != 0){
var validationRange = dataYear.getRange(3, makeIndex, dataYear.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}
它几乎完美地工作,我 运行 遇到的唯一问题是 L 列中的单元格然后输出数据验证。
我也能够使用嵌套的 if 语句使它工作,但是我不确定如何从单元格中提取而不是仅仅让它显示以前设置的数据。这是代码:
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var aSheet = ss.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
var aValue = aCell.getValue()
if (aColumn == 1 && aSheet.getName() == 'Authenticated Ranges') {
var matchCell = aSheet.getRange(aRow, aColumn).getValue()
if(matchCell == "A1")
licenseTypeCell.setValue("A2");
if(matchCell == "B1")
licenseTypeCell.setValue("B2");
if(matchCell == "C1")
licenseTypeCell.setValue("C2");
if(matchCell == "D1")
licenseTypeCell.setValue("D2");
}
}
我可以更改什么以使其仅显示第二行中的值而不是当前显示的数据验证范围?
在花费了太多时间之后,我最终弄明白了这一点。任何简化这一点的建议当然是受欢迎的,因为我知道这段代码只是功能性的而不是很漂亮!
function onEdit() {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var aSheet = app.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
var targetSheet = app.getActiveSpreadsheet().getSheetByName("Authenticated");
var A1 = targetSheet.getRange(2,1).getValue();
var B1 = targetSheet.getRange(2,2).getValue();
var C1 = targetSheet.getRange(2,3).getValue();
var D1 = targetSheet.getRange(2,4).getValue();
var E1 = targetSheet.getRange(2,5).getValue();
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
var aValue = aCell.getValue()
if (aColumn == 16 && aSheet.getName() == 'Master') {
var matchCell = aSheet.getRange(aRow, aColumn).getValue()
if(matchCell == "A1")
licenseTypeCell.setValue(A1);
if(matchCell == "B1")
licenseTypeCell.setValue(B1);
if(matchCell == "C1")
licenseTypeCell.setValue(C1);
if(matchCell == "D1")
licenseTypeCell.setValue(D1);
if(matchCell == "E1")
licenseTypeCell.setValue(E1);
}
}