Google apps script “移动”;主动的;Google Sheet宏语言中的单元格
我试图编写一个函数,从一个表中提取第n列(在示例4中)数据,从某一行/列开始,该行/列的地址定义为变量。我尝试使用偏移量,但使用.getrange()将“活动”单元格移动到第n个位置,并使该单元格成为活动单元格,但宏中止。有人这样做过吗?由于数据的性质,移动“活动”单元格n列非常重要。代码子集如下:Google apps script “移动”;主动的;Google Sheet宏语言中的单元格,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我试图编写一个函数,从一个表中提取第n列(在示例4中)数据,从某一行/列开始,该行/列的地址定义为变量。我尝试使用偏移量,但使用.getrange()将“活动”单元格移动到第n个位置,并使该单元格成为活动单元格,但宏中止。有人这样做过吗?由于数据的性质,移动“活动”单元格n列非常重要。代码子集如下: function PullSelectedData() { // var GeneralDataFirstLocation = "D4"; //data starting point cel
function PullSelectedData() {
//
var GeneralDataFirstLocation = "D4"; //data starting point cell D4
var ColumnsBetweenSeries = 4; //want data from each of the 4 columns (e.g.; D4, H4, L4, P4....)
var ReturnedValue = 0;
//
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS = spreadsheet.getSheetByName("BONDCHECKSHEET");
//
for (var i = 0; i <= 3; i++) {
BondCheckSS.getRange(GeneralDataFirstLocation).Offset(0, ColumnsBetweenSeries * i).activate();
ReturnValue = getActiveCell().getValue();
}
}
函数PullSelectedData(){
//
var GeneralDataFirstLocation=“D4”//数据起始点单元格D4
var ColumnsBetweenSeries=4;//希望从4列中的每一列(例如:D4、H4、L4、P4……)获取数据
var ReturnedValue=0;
//
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS=spreadsheet.getSheetByName(“BONDCHECKSHEET”);
//
对于(var i=0;i)它崩溃的原因
- 第一个问题是,
Offset
不是一个函数,所以它应该是,尽管您对函数的参数是正确的,所以这个问题得到了解决
- 下一个问题是
getActiveCell
本身不是一个函数,必须在工作表上调用它。例如
- 第三个问题不会导致代码崩溃,但允许您使用
ColumnsBetweenSeries
变量,它将循环更改为for(var i=0;i
不想要的行为
在这一点上,您的代码现在运行良好,不再崩溃,但仍然存在一个问题,它没有完全实现您希望它做的事情
函数PullSelectedData(){
var GeneralDataFirstLocation=“D4”//数据起始点单元格D4
var ColumnsBetweenSeries=4;//希望从4列(D4、H4、L4、P4)中的每一列获取数据
var ReturnedValue=0;
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS=spreadsheet.getSheetByName(“BONDCHECKSHEET”);
对于(变量i=0;i<系列之间的列;i++){
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0,系列之间的列*i).activate();
ReturnedValue=BondCheckSS.getActiveCell().getValue();
}
}
主要的问题是,ReturnedValue
在循环的每次迭代中都会被覆盖。因此我们需要将它添加到每次迭代的总数中,或者我们可以将它们全部放在一个列表中,以便以后进行进一步的处理
如果我们希望将每个单元格的值添加到总数中,那么在循环中设置ReturnedValue
的行将变为
ReturnedValue+=BondCheckSS.getActiveCell().getValue();
如果我们想将所有元素都放在一个列表中,我们可以使用append函数将每个元素添加到一个列表中,MyList.append(valueToAppend)
,在这种情况下,声明ReturnedValue
如下所示:
var ReturnedValue=[];
在循环内部,设置ReturnedValue
变成以下内容,将每个值添加到列表的末尾
ReturnedValue.append(BondCheckSS.getActiveCell().getValue());
求和示例
函数PullSelectedData(){
var GeneralDataFirstLocation=“D4”//数据起始点单元格D4
var ColumnsBetweenSeries=4;//希望从4列(D4、H4、L4、P4)中的每一列获取数据
var ReturnedValue=0;
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS=spreadsheet.getSheetByName(“BONDCHECKSHEET”);
对于(变量i=0;i<系列之间的列;i++){
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0,系列之间的列*i).activate();
ReturnedValue+=BondCheckSS.getActiveCell().getValue();//注意从=到的更改+=
}
}
列表示例
函数PullSelectedData(){
var GeneralDataFirstLocation=“D4”//数据起始点单元格D4
var ColumnsBetweenSeries=4;//希望从4列(D4、H4、L4、P4)中的每一列获取数据
var ReturnedValue=[];//注意从0到[]的变化
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS=spreadsheet.getSheetByName(“BONDCHECKSHEET”);
对于(变量i=0;i<系列之间的列;i++){
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0,系列之间的列*i).activate();
ReturnedValue.append(BondCheckSS.getActiveCell().getValue());//我们现在将每个值追加到列表中,而不是每次都覆盖它
}
}//ReturnedValue现在由D4、H4、L4和P4的值填充,例如:[10、20、30、40]