Скрипты электронных таблиц Google, используемые в электронных таблицах (не в библиотеках)
Я проделал массу поисков этой проблемы, и я думаю, что проблема в том, что все ответы приводят к решению, которое требует от вас создания библиотеки. Затем единственный способ добавить эту библиотеку в электронную таблицу - это создать новый сценарий для этой электронной таблицы и включить его.
Что я хочу: куча электронных таблиц, которые все включают один основной скрипт. Каждый раз, когда скрипт обновляется, все они обновляются, чтобы использовать последний скрипт.
Что у меня есть: 15 электронных таблиц, которые все имеют копии оригинального сценария. Оригинальный скрипт изменился, и теперь, похоже, мне нужно отредактировать каждый скрипт с именем
Copy of myScriptName
который существует в каждой скопированной электронной таблице.Что я сделал: я создал первую электронную таблицу и написал скрипт из проекта, который я создал в редакторе скриптов. Работал отлично. Затем я сделал 14 копий этой таблицы для каждого подразделения компании.
Как я могу просто поделиться сценарием и управлять им вне какой-либо отдельной таблицы? Я должен что-то здесь упустить, учитывая, что все люди ищут такой же ответ. Я просто не понимаю, как создание библиотеки решает мою задачу.
Спасибо!
Я не вижу, что это поможет, но согласно запросу комментария вот сценарий:
function createRollupTable() {
//Return if:
// There is only the account code parameters passed in with no quarterly info
// If the length of the account code parameters passed is empty
if(arguments.length <= 1 || !arguments[0] || arguments[0].length <= 0) {
return "";
}
var rollupTable = new Array();
var fullListAccountCodes = arguments[0];
//The first column of output is the full list of account codes for all the quarters
rollupTable[0] = fullListAccountCodes;
//Array to keep the YTD total for each account code
var yearlyAccountCostOutput = new Array(fullListAccountCodes.length);
//Iterate over all the quarters that were passed in
for(var i=1;i<arguments.length;i++) {
//This array should be set to the total length of the available account codes
var quarterlyRollupCostOutput = new Array(fullListAccountCodes.length);
var quarterlyBreakdown = arguments[i];
var quarterIndexCounter = 0;
var quarterTotalCost = 0;
//Iterate over all the account codes
for(var j=0;j<fullListAccountCodes.length && quarterIndexCounter<quarterlyBreakdown.length;j++) {
//Find the one that matches the current account code for this quarter
if(fullListAccountCodes[j] == quarterlyBreakdown[quarterIndexCounter][0]) {
//Set the index of the output based on the full list so they align
quarterlyRollupCostOutput[j] = quarterlyBreakdown[quarterIndexCounter][1];
//Add this cost to the running total for the quarter
quarterTotalCost += quarterlyBreakdown[quarterIndexCounter][1];
//Add the total amount for the yearly rollup for that account code
if(yearlyAccountCostOutput[j]) {
yearlyAccountCostOutput[j] += quarterlyBreakdown[quarterIndexCounter][1];
} else {
yearlyAccountCostOutput[j] = quarterlyBreakdown[quarterIndexCounter][1];
}
//Increment the counter so we search for the next account code in the quarter
quarterIndexCounter++;
}
}
rollupTable[i] = quarterlyRollupCostOutput;
//Add a blank row in the results for spacing
rollupTable[i].push("");
//Add the quarterly total cost
rollupTable[i].push(quarterTotalCost);
}
//Add a blank row for spacing
rollupTable[0].push("");
//Google spreadsheet forces you to pad with non breaking spaces, no right align option available
var spaces = "";
var numSpaces = 66;
for(var i=0;i<numSpaces;i++){spaces+=String.fromCharCode(160);};
//Add a row for the Totals
rollupTable[0].push(spaces + "Totals:");
//Add the YTD column
rollupTable.push(yearlyAccountCostOutput);
return rollupTable;
}
1 ответ
Может быть, то, что вы просите, это просто способ скопировать именно то, что находится в главном сценарии, во все ваши сценарии, которые находятся внутри копий электронной таблицы, чтобы он заменял их код и пропускал необходимость ссылаться на библиотеку, но я подскажу как работает настройка библиотеки...
единственный способ добавить эту библиотеку в электронную таблицу - это создать новый сценарий для этой электронной таблицы.
Когда вы сделаете копию электронной таблицы, в которой уже есть скрипт со ссылкой на библиотеку, она останется с новой копией. Таким образом, вам не нужно создавать какие-либо новые сценарии после того, как вы создали один шаблон электронной таблицы для копирования.
Этот один шаблон электронной таблицы должен иметь библиотечную ссылку на основной скрипт. Мастер не должен находиться внутри листа, и вы не должны копировать оригинальный / главный скрипт.
Итак, у нас есть: 1 мастер-скрипт, 1 шаблон электронной таблицы, в котором есть скрипт, который ссылается на мастер, затем столько копий шаблона, сколько вы хотите.
Теперь, когда вы настраиваете ссылку на библиотеку, у вас есть возможность подключить ее в шаблоне электронной таблицы в режиме разработки. Это позволит любым изменениям существующих функций в главном скрипте мгновенно влиять на копии шаблона (если только сначала не требуется авторизация). Если у вас это так, вы можете сначала проверить свои изменения в копии основного сценария. Другой вариант - оставить режим dev выключенным, и пользователи шаблонных копий вручную обновят свою версию библиотеки внутри каждого из своих сценариев (если не существует системы автоматического обновления версий, о которой я не знаю).
Эта настройка по-прежнему не решает проблему добавления совершенно новой функции в основной скрипт, на которую должна ссылаться каждая копия шаблона. Может быть, кто-то может прокомментировать или дать отдельный ответ на это.
[Обновление: 15.03.2015] Таким образом, публикация дополнения в Интернет-магазине Chrome позволяет один раз установить дополнение и отобразить его во всех ваших листах / документах / формах, которые, как я считаю, были изначально необходимы для OP., Выдвижение новых версий обновляет все документы Google, которые его используют.