名为“报告”的工作表使用查询从多个工作表中导入数据。除了一张纸之外,所有纸都从其他文件中获取数据。
有一个名为“ SavedDB”的工作表,我可以在其中保存要保留的行,以防它们从原始来源中删除。我可以在其他帖子的帮助下使用它。
我创建了两个按钮,即保存和删除,每行都有一个与每个按钮相关联的复选框。
每当用户单击“报表”工作表中的“保存”按钮时,脚本就会将所有已选中TRUE的行复制到工作表SavedDB中,然后由“已格式化保存”中的查询将其导入,然后依次导入通过“报告”中的查询
现在,我正在尝试实施反向过程。当用户单击“删除”时,应从“ SavedDB”中删除选中了列删除的所有行。
已删除的行必须与除前6个列之外的其他所有列完全匹配。前6个列不会首先导出到“ SavedDB”。
这是我到目前为止所拥有的:
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Report'); //source sheet
var testrange = sheet.getRange('D:D'); //range to check
var testvalue = (testrange.getValues());
var csh = ss.getSheetByName('SavedDB'); //destination sheet
var data = [];
var dataNew =[];
//Condition check in D:D; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
if ( testvalue[i] == 'true') {
data.push.apply(data,sheet.getRange(i+1,7,1,25).getValues());
}
}
//####THIS IS WHERE I AM STUCK###
//GET ALL NON-EMPTY ROWS ON 'SavedDB IN THE ARRAY dataNew
//COMPARE BOTH ARRAYS data AND dataNew
// ADD ALL THE UNIQUE ROWS, AND IF A ROW IS REPEATED DISCARD IT ALTOGETHER
//SAVE NEW VALUES TO 'savedDB'
//######
//changes the check boxes back to false(unchecked)
var resetRange = sheet.getRange('E3:E');
var values = resetRange.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] == true) {
values[i][j] = false; // Modified
}
}
}
resetRange.setValues(values);
}
谢谢大家!
答案 0 :(得分:0)
我不确定您还想要什么,但这可能是一个更好的开始。
function deleteRows() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Report');
var rg=sh.getRange(1,4,sh.getLastRow(),1);
var vA=rg.getValues();
var dsh=ss.getSheetByName('SavedDB');
var data = [];
for (i=0; i<vA.length;i++) {
if (vA[i][0]=='TRUE') {
data.push(sh.getRange(i+1,7,1,25).getValues()[0]);
}
}
}