Ich bin ein bisschen festgefahren mit meinem Google Apps-Skript beabsichtigt, eine Summe von Zellen zu berechnen, die sind durchgestrichen.Summe Zellen, wenn sie nicht durchgestrichen sind
Hier ist seine Quelle:
function SumIfNotStrikethrough(rangeA1Notation)
{
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var mysheet = sheet.getActiveSheet();
var dataRange = mysheet.getDataRange();
var mydatarange = mysheet.getRange(rangeA1Notation);
var numRows = mydatarange.getLastRow();
var rowindex = mydatarange.getRowIndex();
var columnindex = mydatarange.getColumnIndex();
var total =0;
for(i=rowindex;i<=numRows;i++)
{
if(dataRange.offset(i-1, columnindex-1, 1, 1).isBlank() != true && dataRange.offset(i-1, columnindex-1, 1, 1).getFontLine() != "line-through")
{
var temp = dataRange.offset(i-1, columnindex-1, 1, 1).getValue();
total = total + temp;
}
}
return total;
}
Hier ist die Formel: =SumIfNotStrikethrough("J2")
.
Ich habe zwei Fragen hier: Um diese Formel zu verwenden, wie zum Beispiel SumIfNotStrikethrough(J2)
statt SumIfNotStrikethrough("J2")
Wie das Google Apps Script hinzufügen? Zitate sind so lästig in Bezug auf die Änderung seiner Bereich manuell nach der Formel auf andere Zellen Skalierung :-(Was im Quellcode geändert werden sollte
Als ich dieses Skript ich mit folgendem Fehler konfrontiert:.?
?
Range not found (line 9, file "SumIfNotStrikethrough"
So, wie kann ich es beheben
UPD № 1. Hier ist ein Beispiel mit einer String-Referenz, aber es zählt nur die Anzahl der Zellen:
function countStrike(range) {
var count = 0;
SpreadsheetApp.getActiveSheet()
.getRange(range)
.getFontLines()
.reduce(function (a, b) {
return a.concat(b);
})
.forEach(function (el) {
if (el === "line-through") {
count++
}
});
return count;
}
UPD № 2. Leider unterscheidet sich diese Frage von meiner vorherigen Frage "Summenzellen, wenn sie nicht fett sind". Ich habe jeweils versucht, das Skript zu ändern, aber es hat nicht funktioniert. Ja, es fasst Zellen aber es fasst alle Zellen mit Durchschlagen und ohne :-(
Hier ist, was ich geändert:.
function SumIfNotStrikethrough(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i)[1].split("!");
try {
if (args.length == 1) {
var range = sheet.getRange(args[0]);
}
else {
sheet = ss.getSheetByName(args[0].replace(/'/g, ''));
range = sheet.getRange(args[1]);
}
}
catch(e) {
throw new Error(args.join("!") + " is not a valid range");
}
var weights = range.getFontLine();
var numbers = range.getValues();
var x = 0;
for (var i = 0; i < numbers.length; i++) {
for (var j = 0; j < numbers[0].length; j++) {
if (weights[i][j] != "line-through" && typeof numbers[i][j] == "number") {
x += numbers[i][j];
}
}
}
return x;
}
Danke für alle Ihre Versuche, mir zu helfen, in vorrücken
Ich gebe ein Beispiel in der Post-Update, aber es zählt nur die Anzahl der Zellen, nicht eine Summe davon. – RLearnsR
Mögliches Duplikat von [Summenzellen, wenn sie nicht fett sind] (http://stackoverflow.com/questions/37964794/sum-cells-if-they-are-not-bold) –
Es gibt keinen konzeptionellen Unterschied zwischen diesen beiden Fragen du hast geposted. –