我有一张纸:'trainingmatrix',在第2行B,D,F,H列中包含信息... 我想将其粘贴到另一张“学习”列C的第2、3、4、5行中。...我尝试了下面的代码,但似乎不起作用...任何想法? for循环应该有问题,但这是我第一次使用两个变量和不同的递增步骤进行for循环。
var trainingmatrix=ss.getSheetByName('Training Matrix');
var vlearning=ss.getSheetByName('VLearning_Upload');
var lr=getlastrow(trainingmatrix,"A1:HA");
var tnavalues=trainingmatrix.getRange(1,1,lr-1,15).getValues();
var vlearnvalues=vlearning.getRange(1,1,vlearning.getLastRow(),
vlearning.getLastColumn()).getValues();
for (var i=1 && j=1;i<vlearnvalues.length && j<vlearnvalues[0].length;i++ && j=j+2){
vlearnvalues[i][2]=tnavalues[1][j];
}
Logger.log(values);```
答案 0 :(得分:0)
尝试使用两个嵌套的“ for”循环使用两个变量循环。
for (var i = 1; i < vlearnvalues.length; i++) {
for (var j = 1; j < vlearnvalues[0].length; j++) {
vlearnvalues[i][2] = tnavalues[1][j];
}
}
尽管我会确保变量(vlearnvalues,tnavalues)包含您认为的内容,方法是在循环遍历它们之前先对其进行记录,因为即使该循环正常运行,我也不确定您是否会实现所需的目标。
答案 1 :(得分:0)
我可以在您的代码中看到几个问题:
var lr=getlastrow(trainingmatrix,"A1:HA");
替换var lr = trainingmatrix.getLastRow();
vlearnvalues[0].length
(为15)并尝试访问值tnavalues[1][j]
,如果Training Matrix
中的范围宽度为比VLearning_Upload
中更窄。vlearnvalues[i][2]=tnavalues[1][j];
在Apps脚本中不起作用。相反,您需要访问VLearning_Upload
范围内的单个单元格,并使用函数setValue()
为Training Matrix
范围内的值分配一个值。Training Matrix
中的某些值?您需要一个if语句。例如,假设B,D,F,H是非空列-并且您只想复制非空值,则可以实现:if(tnavalues[1][j]!="")
。满足您要求的示例代码如下:
function Copy() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var trainingmatrix=ss.getSheetByName('Training Matrix');
var vlearning=ss.getSheetByName('VLearning_Upload');
var lr = trainingmatrix.getLastRow();
var tnavalues=trainingmatrix.getRange(1,1,lr-1,15).getValues();
var vlearnvalues=vlearning.getRange(2,3,vlearning.getLastRow(),vlearning.getLastColumn());
var array=[];
for (var j=1; j<tnavalues[0].length; j++)
{
if(tnavalues[1][j]!="")
{
array.push(tnavalues[1][j])
}
}
for(var i=1;i<vlearnvalues.getHeight();i++)
{
var cell=vlearnvalues.getCell(i,1);
if(typeof array[(i-1)]!=='undefined')
{
cell.setValue(array[(i-1)]);
}
}
}
请参考Apps脚本参考以找到有关不同方法的更多信息以及如何使用它们的示例: