Google Spreadsheet Scripts, die in mehreren Arbeitsblättern (nicht in Bibliotheken) verwendet werden
Ich habe eine Menge nach diesem Problem gesucht und ich denke, dass das Problem darin besteht, dass alle Antworten zu einer Lösung führen, bei der Sie eine Bibliothek erstellen müssen. Die einzige Möglichkeit, diese Bibliothek zu einer Tabelle hinzuzufügen, besteht darin, ein neues Skript für diese Tabelle zu erstellen und einzuschließen.
Was ich möchte: Eine Reihe von Tabellenkalkulationen, die alle ein Masterskript enthalten. Jedes Mal, wenn das Skript aktualisiert wird, werden alle aktualisiert, um das neueste Skript zu verwenden.
Was ich habe: 15 Tabellenkalkulationen, die alle Kopien des Originalskripts enthalten. Das ursprüngliche Skript hat sich geändert und jetzt scheint es, dass ich jedes aufgerufene Skript bearbeiten mussCopy of myScriptName
das ist in jeder kopierten Tabelle vorhanden.
Was ich getan habe: Ich habe die erste Tabelle erstellt und das Skript aus einem Projekt heraus geschrieben, das ich in seinem Skript-Editor erstellt habe. Hat perfekt funktioniert. Ich habe dann 14 Kopien dieser Tabelle für jeden Unternehmensbereich angefertigt, um sie zu verwenden.
Wie kann ich das Skript einfach freigeben und außerhalb der einzelnen Tabellen selbst verwalten? Ich muss hier etwas vermissen, wenn man bedenkt, dass alle Leute nach der gleichen Antwort suchen. Ich verstehe nur nicht, wie ich meinen Anwendungsfall lösen kann, wenn ich daraus eine Bibliothek mache.
Vielen Dank!
Ich verstehe nicht, was dies helfen wird, aber gemäß der Anfrage des Kommentars hier ist das Skript:
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;
}