Я создаю дополнение к Google Sheets, которое отображает некоторую информацию на листе и сохраняет данные в хранилище документов по PropertiesService
. Я знаю, что нет способа проверить, когда лист был скопирован, если я хочу скопировать / связать данные с новым листом. И я слышал и читал о DeveloperMetadata
. Но не осознавал: копируется ли DeveloperMetadata
на лист, когда исходный лист копируется на новый? Я попробовал и увидел, что нет.
Итак, правильно? Если «да», нет ли разницы между использованием PropertiesService
для документа и DeveloperMetadata
для листа в этом случае?
UPD: (примерно DeveloperMetadata
)
Я создал новую электронную таблицу и записал в Script Editor 2 функции:
function showAllMetadata()
{
var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var allDeveloperMetadata = allSheets.map(function(sheet){
return {
id: sheet.getSheetId(),
name: sheet.getName(),
metadata: sheet.getDeveloperMetadata().map(function(meta){ return meta.getValue() })
}
});
Logger.log(JSON.stringify(allDeveloperMetadata));
}
function addMetadataToCurrentSheet()
{
SpreadsheetApp
.getActiveSheet()
.addDeveloperMetadata('metadata', 'foo');
showAllMetadata();
}
Затем я сделал:
- Выполнить
addMetadataToCurrentSheet()
и увидел
[{"id":0,"name":"Sheet1","metadata":["foo"]}]
Дублируйте этот лист, нажав на кнопку «Дублировать» Запустите
showAllMetadata()
и увидите
[
{"id":0,"name":"Sheet1","metadata":["foo"]},
{"id":1107155653,"name":"Copy of Sheet1","metadata":[]}
]
Но я ожидал увидеть
[
{"id":0,"name":"Sheet1","metadata":["foo"]},
{"id":1107155653,"name":"Copy of Sheet1","metadata":["foo"]}
]