- Когда пользовательская формула
=SHEETNAME(0)
помещается в ячейку, вы хотите поместить имя листа активного листа в электронную таблицу. - Когда пользовательская формула
=SHEETNAME(1)
имеет значение положить в ячейку, вы хотите поместить формулы =HYPERLINK("#gid=XXXXXXXXXXXXX","SHEET1")
для всех листов. - Когда пользовательская формула
=SHEETNAME(2)
помещается в ячейку, вы хотите поместить имя электронной таблицы активной электронной таблицы .
Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких возможных ответов.
Проблема и обходное решение:
К сожалению, в текущей спецификации стороны Google формула не может быть помещена в ячейку с помощью пользовательской формулы. , Когда формула помещается в ячейку с помощью пользовательской формулы, формула помещается как строковое значение. Я думаю, что это является причиной вашей проблемы.
В качестве обходного пути я хотел бы предложить поместить формулу =HYPERLINK("#gid=XXXXXXXXXXXXX","SHEET1")
, используя триггер события OnEdit, когда пользовательская формула =SHEETNAME(#)
установлена в клетка. Я думаю, что с помощью этого обходного пути ваша цель может быть достигнута.
Когда ваш скрипт будет изменен, пожалуйста, измените его следующим образом.
Измененный скрипт:
В этом случае простой триггер может быть использован. Поэтому, пожалуйста, скопируйте и вставьте следующий скрипт в редактор скриптов и сохраните скрипт. Чтобы использовать этот скрипт в качестве теста, пожалуйста, поместите =SHEETNAME(1)
в ячейку.
function onEdit(e) {
const spreadsheet = e.source;
const range = e.range;
const sheet = range.getSheet();
const formula = range.getFormula();
const f = formula.match(/\=SHEETNAME\((\d+)\)/i);
if (f && f.length > 0) {
if (f[1] == "0") {
range.setValue(sheet.getSheetName());
} else if (f[1] == "1") {
var formulas = spreadsheet.getSheets().map(val => [`=HYPERLINK("#gid=${val.getSheetId()}","${val.getName()}")`]);
range.offset(0, 0, formulas.length, 1).setFormulas(formulas);
} else if (f[1] == "2") {
range.setValue(spreadsheet.getName());
}
}
}
В этом случае есть функция SHEETNAME()
в вашем редакторе скриптов. Поэтому, когда =SHEETNAME(1)
помещается в ячейку, сначала запускается функция SHEETNAME()
, а затем функция onEdit
автоматически запускается триггером события OnEdit. Если вы не хотите показывать значения из SHEETNAME()
, замените функцию SHEETNAME()
следующим образом.
const SHEETNAME = () => "";
Примечание:
- В этом случае при непосредственном запуске функции
onEdit
в редакторе сценариев возникает ошибка. Пожалуйста, будьте осторожны. - Этот скрипт запускается под V8.
Ссылки:
Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я приношу свои извинения .