【发布时间】:2016-06-22 15:10:49
【问题描述】:
我有点卡住我的 Google Apps 脚本,该脚本旨在计算 不是 删除线的单元格的总和。
这是它的来源:
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;
}
这是它的公式:=SumIfNotStrikethrough("J2")。
我有两个问题:
如何添加 Google Apps 脚本以使用此公式,例如,
SumIfNotStrikethrough(J2)而不是SumIfNotStrikethrough("J2")?引号在其他单元格上缩放公式后手动更改其范围非常烦人:-(。源代码中应该更改什么?当我运行这个脚本时,我遇到了以下错误:
未找到范围(第 9 行,文件“SumIfNotStrikethrough”
那么,我该如何解决呢?
UPD № 1. 这是一个带有字符串引用的示例,但它只计算单元格的数量:
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。不幸的是,这个问题与我之前的问题“如果单元格不是粗体,则求和”不同。我分别尝试更改脚本,但没有成功。是的,它对单元格求和 ,但它对所有带有删除线和没有删除线的单元格求和 :-(。
这是我改变的:
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;
}
感谢您提前帮助我的所有尝试!
【问题讨论】:
-
我在帖子更新中放了一个例子,但它只计算单元格的数量,而不是它的总和。
-
您发布的这两个问题在概念上没有区别。
-
是的!我尝试更改“如果单元格不是粗体则求和”的来源,但没有成功:-(。请参阅更新№2。
-
@soup,也许我应该更改源中的其他内容以使其正常工作?
标签: javascript google-apps-script google-drive-api