私はこの問題を大量に検索しましたが、問題はすべての答えがライブラリの作成を必要とする解決策になることだと思います。次に、そのライブラリをスプレッドシートに追加する唯一の方法は、そのスプレッドシート用の新しいスクリプトを作成して含めることです。
私が欲しいもの: 1 つのマスター スクリプトをすべて含むスプレッドシートの束。スクリプトが更新されるたびに、それらはすべて最新のスクリプトを使用するように更新されます。
私が持っているもの: 元のスクリプトのコピーがすべて含まれている 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;
}