Google apps script 谷歌工作表-识别重复和覆盖数据
我已经大量编辑了我发布的原始问题,因为我自己已经解决了一些问题。我现在只被一件事困住了Google apps script 谷歌工作表-识别重复和覆盖数据,google-apps-script,Google Apps Script,我已经大量编辑了我发布的原始问题,因为我自己已经解决了一些问题。我现在只被一件事困住了 function payINVOICE() { var ss = SpreadsheetApp.getActive(); var ds = SpreadsheetApp.openById("14imcEob2qIZbH6AjGYtf16MJxbnfkhQn1ae4jR-Nzq4"); var srcSheet = ss.getSheetByName("INVOICE_ENTRY"); var
function payINVOICE() {
var ss = SpreadsheetApp.getActive();
var ds = SpreadsheetApp.openById("14imcEob2qIZbH6AjGYtf16MJxbnfkhQn1ae4jR-Nzq4");
var srcSheet = ss.getSheetByName("INVOICE_ENTRY");
var dstSheet = ds.getSheetByName("INVOICE_ENTRY");
var data_range = srcSheet.getRange('B4:J100');
var data_data = data_range.getValues();
var data_clean = data_data.filter(function (r) {return r[1]});
var clear_range = srcSheet.getRange('B4:I100');
var lr = dstSheet.getLastRow();
dstSheet.getRange(lr+1, 2,data_clean.length,9).setValues(data_clean);
clear_range.clear();
}
该代码检查范围B4:J100是否存在B列中的值。
如果有一个值并且脚本运行,它会将这些行复制到dstSheet上
我的职责是将发票标记为已付款或未付款。
dstSheet将已经包含数据,通过查询将数据拉回到srcSheet中。列K不是原始查询的一部分。
如果我在srcSheet的K列中将一行标记为“PAID”,我希望代码获取data_data变量并覆盖dstSheet中已经存在的内容,以便查询随后将数据拉回到srcSheet中,J列显示为“PAID”
这意味着我可以将K列更改为“未支付”,再次运行脚本,它将重写“已支付”
这比我上一篇文章更有意义,我离实现我所需要的目标已经很近了,只是停留在这最后一点上。如果你只是想监控上述两张工作表之间的变化,那么使用
onEdit(e)
触发器会更容易,它会告诉你哪个单元格被编辑过
一小条
解释
上面的代码使用了onEdit(e)
可安装触发器和e
事件对象。这样,当对11
列(又名K
列)上的srcSheet
进行编辑,并且工作表名称为“发票条目”
,则进行更改的行将保留在行
变量中。之后,相应的数据行保存在data
变量中;getRange(row,2,1,10)
引用对K
列进行更改的行的范围。为了更新数据表
,使用设置值(数据)
将数据
值设置为相应的范围
安装触发器
要在编辑操作上触发payINVOICE(e)
功能,需要安装OneEdit
触发器
这是通过单击此图标访问项目触发器来完成的:
之后,只需单击添加触发器按钮创建一个新触发器,并使用以下设置创建一个触发器:
尝试函数
为了尝试此行为,您只需在K
列的srcSheet
上进行编辑,此更改将反映在destSheet
中
笔记
选择此脚本中使用的范围时考虑到以下事实:
K
列由已支付的
/未支付的
文本组成
srcSheet
和dstSheet
的数据范围相同
您可能需要根据您的工作表自定义这些,并添加您提到的所需公式/过滤器
参考
- )
-
嘿,曼斯图,你的目标是什么?你介意更具体一点,提供更多关于你想要实现的目标的信息吗?例如,你想从哪张工作表中识别哪些重复项?嘿,ale13!我在原来的帖子中添加了评论。谢谢@ale13。没想到你会这么麻烦。不得不说,我发现你的解释比代码本身更有帮助,尽管我也很欣赏代码。非常感谢。嘿@mancstu,我添加了一些关于代码的解释。让我知道它是否更清楚和/或有任何问题。干杯
function payINVOICE(e) {
var srcSheet = SpreadsheetApp.getActiveSheet(); //gets the active sheet which is supposed to be source sheet
var dstSheet = SpreadsheetApp.openById('DEST_SHEET_ID').getSheetByName('INVOICE_ENTRY'); //gets the destination sheet
if (e.range.getSheet().getName() == 'INVOICE_ENTRY' && e.range.getColumn() == 11) { //e specifies where the edit has been made - therefore this if condition checks if the edit is in the INVOICE ENTRY sheet and if the column is the K column
var row =e.range.getRow(); //this gathers the row at which the edit has been made
var data = srcSheet.getRange(row, 2, 1, 10).getValues(); //this gathers the data corresponding to the row at which the edit has been made
dstSheet.getRange(row, 2, 1, 10).setValues(data); //this sets the data into the corresponding row in the destination sheet
}