获取 sheet 名称无法正常工作或在使用循环复制到新的 sheet 后无法自动更新

get sheet names not work properly or not auto update after use loop to copy to new sheets

我使用此循环从现有 sheet Main

创建或复制到新的 sheet
var ss = SpreadsheetApp.getActiveSpreadsheet()
for (var sheet = 1; sheet <= 5; sheet++) {
  ss.getSheetByName("Main").copyTo(ss).setName(sheet)
}

并且我还在单元格 A1 中填写了公式 sheetname(),这个公式对它显示的那些 sheets "Copy of Main" 它不正确 sheet name as上面的数字“1到5” (其实数字是我想改的)

function sheetname() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheetName()
}

当我手动重新填充 sheetname() 时,它工作得很好。但是当我使用脚本循环时,复制到然后使用自定义公式。它无法正常工作或无法自动更新。

当我不需要手动重新填充时,有什么方法可以完成这项工作吗?或者我可以在循环 "for" 中设置 sheet name 的值吗?

你可以遇到关于这个的最好的文章Automatic Recalculation of Custom Function on Spreadsheet Part 1, Automatic Recalculation of Custom Function on Spreadsheet Part 2

对于你的情况,下一个代码就可以了

var ss = SpreadsheetApp.getActiveSpreadsheet();

for (var sheet = 1; sheet <= 5; sheet++)
  ss.getSheetByName("Main").copyTo(ss).setName(sheet);

var temp = Utilities.getUuid();
ss.createTextFinder("=").matchFormulaText(true).replaceAllWith(temp);
ss.createTextFinder(temp).matchFormulaText(true).replaceAllWith("=");