javascript - 是否可以指定 onEdit 事件,例如合并单元格或删除内容?
问题描述
我有一个包含多个项目工作表的电子表格。每个工作表都是一个更广泛的项目类别或“桶”。我想要一个概览表,当新项目添加到存储桶表时,它会自动填写项目和存储桶名称。我认为我非常接近实现这一目标,但是当编辑合并单元格或删除内容时,我当前的代码会添加到概览表中(因此在概览中添加了空白项目)。如果在编辑前单元格开始空白时仅将项目名称添加到概览中,那就太好了。如果编辑现有项目可以在概述中更改该项目,那将是理想的(如果可以这样做,则需要更多考虑,我可以稍后再做。现在,我只需要在事件合并或删除内容时忽略它)。
如果可以指定不同的事件,我想我可以添加更多 if 语句或条件来排除合并或删除。这将是一个可用的修复。如果可以链接项目名称的原始单元格和最终单元格,以便对原始项目单元格的编辑会更改最终项目单元格,反之亦然,那将是惊人的!
这是我当前的代码:
function onEdit(event) {
var spreadsheet = SpreadsheetApp.getActive();
var originTab = event.source.getActiveSheet();
if(originTab.getName() != 'Overview' & originTab.getName() != 'Braindump'){
var originCell = originTab.getActiveCell();
if(originCell.getColumn() == 1){
var projectName = originCell.getValue();
var bucketName = originTab.getName();
var finalTab = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Overview'));
var newRow = finalTab.getLastRow() + 1;
finalTab.getRange("A" + newRow).setValue(bucketName);
finalTab.getRange("B" + newRow).setValue(projectName);
}
}
}
这段代码在将项目添加到概览表方面做得很好,但是当编辑合并或删除单元格内容时,它也会添加空白项目(仍然具有存储桶名称)。
编辑:我已经做了一个适合我的修复,但如果有人知道更好的方法,我仍然想要一些输入!如果项目名称单元格为空白,我只是将其设置为删除“概述”中的一行。所以最新的代码是:
function onEdit(event) {
var spreadsheet = SpreadsheetApp.getActive();
var originTab = event.source.getActiveSheet();
var originTabName = originTab.getName()
if(originTabName != 'Overview' & originTabName != 'Braindump'){
var originCell = originTab.getActiveCell();
if(originCell.getColumn() == 1){
var projectName = originCell.getValue();
var bucketName = originTab.getName();
var finalTab = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Overview'));
var newRow = finalTab.getLastRow() + 1;
finalTab.getRange("A" + newRow).setValue(bucketName);
finalTab.getRange("B" + newRow).setValue(projectName);
if(finalTab.getRange("B" + newRow).getValue() == ''){
finalTab.deleteRow(newRow);
}
}
}
spreadsheet.setActiveSheet(spreadsheet.getSheetByName(originTabName));
}
解决方案
尝试这个:
function onEdit(e) {
var exshts=['Overview','Braindump']
var sh=e.range.getSheet();
var name=sh.getName()
if(exshts.indexOf(name)>-1)return;
if(e.range.columnStart==1) {
var projectName=e.value;
var fT=e.source.getSheetByName('Overview');
var nrow=fT.getLastColumn() + 1;
var fR1=fT.getRange(nrow,1);
fR1.setValue(name);
var fR2=fT.getRange(nrow,2);
fR2.setValue(e.value);
if(e.value=='')fT.deleteRow(nrow);
}
}
推荐阅读
- ios - 如何修复“nw_connection_receive_internal_block_invoke”(控制台)
- properties - 如何有条件地修改按钮(或其他 UIView)的属性?
- javascript - 从 Javascript 中的函数创建关联数组
- ios - 如何从 Xcode 中导入的 .dae 中访问混合形状
- python - 为什么 python timeit 结果与 shell 的 time 命令相矛盾?
- python - 将由数字组成的长字符串转换为长二进制字符串
- python - 在pyqtgraph的ImageView中设置X和Y范围
- jquery - 如何创建一个按钮来隐藏和显示每个帖子的更多标签?
- python - 如何读取我自己的python代码生成的数据?
- excel - 多次使用内置排序函数会导致运行时错误:'1004' 排序引用无效