我正在尝试基于DYNAMIC RANGE运行PROPAGATEFORMULAE函数(请参阅下面的代码)(即我的行数和列数可能会不断变化)。
但是每当我运行它时,脚本都会执行(参见execution transcript),但似乎没有调用PROPAGATEFORMULAE函数。我不确定我做错了什么。每当我将STATIC值设置为范围时,该功能都有效,但我想让它们保持动态。
function myFunction() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns");
var lastrow = sh.getLastRow();
var numrows = lastrow;
var lastcol = sh.getLastColumn();
var numcols = lastcol;
var range = sh.getRange(1,1,numrows,numcols);
sh.setActiveRange(range);
return propagateFormulae(range);
}
function getCellFromSheet(row,col,sheet){
return SpreadsheetApp.getActiveSpreadsheet().getSheets()[sheet].getRange(row,col);
}
function propagateFormulae(rows, cols, currentSheet){
for(var i=1;i<=cols;i++){
for(var j=2;j<=rows;j++){
if(getCellFromSheet(j,i,currentSheet).getValue().length == 0)
getCellFromSheet(j-1,i,currentSheet).copyTo(getCellFromSheet(j,i,currentSheet));
else{
j=rows;
}
}
}
}
答案 0 :(得分:1)
你缺少2个预期功能的变量:
cols, currentSheet
开:
return propagateFormulae(range);
功能
function propagateFormulae(rows, cols, currentSheet){
<强>更新强> 如果range对象具有运行函数传播所需的变量,则需要在函数
中获取对象的值return propagateFormulae(range);
像:
function propagateFormulae(range){//expected variable and object
r=$this->range.rows;
c=$this->range.cols;
cs=$this->range.currentSheet;
如果不是对象,则需要发送所有变量。
答案 1 :(得分:0)
我能够做到这一点并且有效:
function myFunction() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns");
var lastrow = sh.getLastRow();
var numrows = lastrow;
var lastcol = sh.getLastColumn();
var numcols = lastcol;
var range = sh.getRange(1,1,numrows,numcols);
sh.setActiveRange(range);
return propagateFormulae(numrows, numcols, sh);
}
function propagateFormulae(rows, cols){
for(var i=1;i<=cols;i++){
for(var j=2;j<=rows;j++){
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns");
if(sh.getRange(j,i).getValue().length == 0)
sh.getRange(j-1,i).copyTo(sh.getRange(j,i));
else{
j=rows;
}
}
}
}