【发布时间】:2019-10-04 21:21:37
【问题描述】:
我对 javascript 比较陌生,对谷歌脚本绝对是新手。
我有一个用于输入原始数据的选项卡。我有另一个选项卡对数据进行排序,稍后会在该行旁边写一个批准日期。我希望该日期反映到正确行中的第一个选项卡,并且我还想确保它保留在第二个选项卡中的正确行上(即使在添加和排序新行之后)。
附件是一个只有几行的示例表。实际上我有更多的列,但它们在这里无关紧要。 https://docs.google.com/spreadsheets/d/14dh0IW7vO8c2OLc2O8WE-Ptuh3MJfLWTESVMA_DpOv0/edit?usp=sharing 我的第二个选项卡使用工作表排序功能。但是,当键入日期时,它会产生错误。我打算通过使用 onEdit() 函数并将日期写入第一个选项卡中的正确行,然后清除第二个选项卡中的日期列(以避免错误并保持对齐)来解决此问题。
''javascript
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = ss.getSheetByName("check released");
var sheet1 = ss.getSheetByName("Log");
var job2 = sheet2.getRange("A2:A1000").getValues();
var job1 = sheet1.getRange("A2:A1000").getValues();
var draw2 = sheet2.getRange("B2:B1000").getValues();
var draw1 = sheet1.getRange("B2:B1000").getValues();
var inv2 = sheet2.getRange("C2:C1000").getValues();
var inv1 = sheet1.getRange("C2:C1000").getValues();
var dates2 = sheet2.getRange("D2:D1000");
var dates_values = sheet2.getRange("D2:D1000").getValues();
var dates1 = sheet1.getRange("D2:D1000");
var indices = []
var to_paste = []
for(var i = 0; i < job2.length; i++) {
var job2_Value = job2[i][0];
var draw2_Value = draw2[i][0];
var inv2_Value = inv2[i][0];
for(var j=0; j<job2.length; j++) {
var job1_Value = job1[j][0];
var draw1_Value = draw1[j][0];
var inv1_Value = inv1[j][0];
if((job2_Value != "") && (job1_Value == job2_Value) && (draw1_Value === draw2_Value) && (inv1_Value === inv2_Value)) {
indices.push([i]);
}
}
}
for(k in indices) {
to_paste.push([dates2[k]])
}
Logger.log(to_paste)
dates1.setValues(to_paste)
dates2.clearContent()
Logger.log("Cleared on check released page")
};
'''
这是我编写的代码,但它不起作用,我不知道为什么。我也不知道在哪里可以找到控制台日志。
【问题讨论】:
-
我可以问你关于你的问题吗? 1.你的问题是什么? 2. 可以提供
it doesn't work的详细信息吗? 3. 你能提供你期望的输出吗? -
当您回答@Tanaike 关于“它不起作用”的问题时,如果问题是脚本失败,请将执行脚本复制/粘贴到您的问题中。
-
问题不在于脚本失败,而是我认为实际算法不正确。我希望索引包含与 dates1 应该的相同记录相关的 dates2 的索引。然后 to_paste 应该在索引的索引处包含 dates2 的内容,然后 to_paste 应该写入 dates2。
-
链接指向谷歌表格示例。
-
@Tedinoz 有什么建议吗?