首页 > 解决方案 > 如何在 Google Apps 脚本中获取空白工作表的名称?

问题描述

我正在尝试制作一个 Google Apps 脚本,它将过滤器功能应用于我的电子表格中的每个工作表,但某些工作表除外。我希望它忽略特定的命名表以及“blankSheet”变量。我希望“blankSheet”包含在特定单元格范围(A2:H)中没有数据的任何工作表。

我尝试了以下操作,但我的电子表格中生成的过滤器功能仍然包含一个空工作表。谢谢您的帮助!

function myFunction() {

const ss = SpreadsheetApp.getActiveSpreadsheet();
const shts = ss.getSheets().filter(sh => sh.getDataRange().isBlank()).map(s => s.getName()).join(',');

//set variables
const masterSheet = "master";
const masterSheetFormulaCell = "A2";
const ignoreSheets = ["notifications","main",shts];
const dataRange = "A2:I";
const checkRangeA = "A2:A";
const checkRangeB = "B2:B";
const checkRangeC = "C2:C";
const checkRangeD = "D2:D";
const checkRangeE = "E2:E";
const checkRangeF = "F2:F";
const checkRangeG = "G2:G";
const checkRangeH = "H2:H";
const checkRangeI = "I2:I";
//end set variables

ignoreSheets.push(masterSheet);

const allSheets = ss.getSheets();

const filteredListOfSheets = allSheets.filter(s => ignoreSheets.indexOf(s.getSheetName()) == -1);

let formulaArray = filteredListOfSheets.map(s => `FILTER({'${s.getSheetName()}'!${dataRange},"${s.getSheetName()}" &LEFT(ROW('${s.getSheetName()}'!${checkRangeA}),0),ROW('${s.getSheetName()}'!${checkRangeA})},'${s.getSheetName()}'!${checkRangeB}&'${s.getSheetName()}'!${checkRangeC}&'${s.getSheetName()}'!${checkRangeD}&'${s.getSheetName()}'!${checkRangeE}&'${s.getSheetName()}'!${checkRangeF}&'${s.getSheetName()}'!${checkRangeG}&'${s.getSheetName()}'!${checkRangeH}&'${s.getSheetName()}'!${checkRangeI}<>"")`);

let formulaText = "=SORT({" + formulaArray.join(";") + "},10,True,11,True)";


ss.getSheetByName(masterSheet).getRange(masterSheetFormulaCell).setFormula(formulaText);



}

标签: google-apps-scriptgoogle-sheets

解决方案


这种类型的操作可能对查找空白表很有用:

function blankSheets() {
  const ss = SpreadsheetApp.getActive();
  let shts = ss.getSheets().filter(sh => sh.getDataRange().isBlank()).map(s => s.getName()).join(',');
  Logger.log(shts);
  return shts;//returns an array of blank sheet names
}

是空白()

您说您想将空白表名称数组分配给单个 const 那么如何:

const shts = ss.getSheets().filter(sh => sh.getRange(2,1,100,9).isBlank()).map(s => s.getName()).join(',');

filter 函数仅返回空白表,map 部分仅返回空白表名称,而 join 部分返回所有以逗号分隔的名称。


推荐阅读