Google apps script 如何使用应用程序脚本从Google工作表中删除一系列特定工作表中所有未受保护的行
我的谷歌工作表中有几个受保护的范围,例如A2到F40,然后是A45到F90。我使用一个按钮(菜单——子菜单)来完成这个受保护的范围。但是,在一系列使用字母和数字的特定表格中,很少有行数据未受保护(例如ICT4113、MATH4104或HUM4119)。很少有其他图纸的名称只包含字母,不需要此功能Google apps script 如何使用应用程序脚本从Google工作表中删除一系列特定工作表中所有未受保护的行,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我的谷歌工作表中有几个受保护的范围,例如A2到F40,然后是A45到F90。我使用一个按钮(菜单——子菜单)来完成这个受保护的范围。但是,在一系列使用字母和数字的特定表格中,很少有行数据未受保护(例如ICT4113、MATH4104或HUM4119)。很少有其他图纸的名称只包含字母,不需要此功能 如何在没有任何触发器的情况下,在函数onOpen()中的一系列特定工作表中删除这些未受保护的数据行。当我想删除时,我会按一个子菜单 我相信你的目标如下 您希望使用Google Apps脚本完全删除没有
如何在没有任何触发器的情况下,在函数onOpen()中的一系列特定工作表中删除这些未受保护的数据行。当我想删除时,我会按一个子菜单 我相信你的目标如下
- 您希望使用Google Apps脚本完全删除没有特定工作表保护范围的行。
- 有几个特定的工作表需要实现这一点
- 您希望通过Google电子表格上的自定义菜单运行脚本
myFunction
时,将删除不受保护范围的行的单元格
function onOpen() {
SpreadsheetApp.getUi().createMenu('Custom Menu').addItem('run script', 'myFunction').addToUi();
}
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ss.getSheets().filter(s => /\d/.test(s.getSheetName())).forEach(sheet => {
// 1. Retrieve data range.
const dataRange = sheet.getDataRange();
// 2. Create an object from the protected range. This is used for removing from the cleared rows.
const protectedRanges = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE).map(e => {
const r = e.getRange();
const start = r.getRow();
return {start: start, end: r.getNumRows() + start - 1};
});
// 3. Create range list for clearing rows using the object.
let rangeList = [];
for (let r = 2; r <= dataRange.getNumRows(); r++) {
let bk = false;
for (let e = 0; e < protectedRanges.length; e++) {
if (protectedRanges[e].start == r) {
r = protectedRanges[e].end;
bk = true;
break;
}
}
if (!bk) rangeList.push(`A${r}:${r}`);
}
// 4. Delete the rows without the rows of the protected ranges.
sheet.getRangeList(rangeList).getRanges().reverse().forEach(r => sheet.deleteRow(r.getRow()));
});
}
函数onOpen(){
SpreadsheetApp.getUi().createMenu('custommenu').addItem('runscript','myFunction').addToUi();
}
函数myFunction(){
const ss=SpreadsheetApp.getActiveSpreadsheet();
ss.getSheets().filter(s=>/\d/.test(s.getSheetName()).forEach(sheet=>{
//1.检索数据范围。
const dataRange=sheet.getDataRange();
//2.从受保护范围创建对象。用于从清除的行中删除。
const protectedRanges=sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE).map(e=>{
常数r=e.getRange();
const start=r.getRow();
返回{start:start,end:r.getNumRows()+start-1};
});
//3.创建使用对象清除行的范围列表。
让rangeList=[];
for(设r=2;r sheet.deleteRow(r.getRow());
});
}
参考资料: