Javascript 如果x推到另一个电子表格,则迭代行
我的脚本大部分工作正常-除了被推送的数据实际上显示“范围”之外,我必须缺少一些东西-您不能跨范围设置值吗Javascript 如果x推到另一个电子表格,则迭代行,javascript,google-apps-script,Javascript,Google Apps Script,我的脚本大部分工作正常-除了被推送的数据实际上显示“范围”之外,我必须缺少一些东西-您不能跨范围设置值吗 函数up4Grabs(){ var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final'); var destsheet=SpreadsheetApp.open
函数up4Grabs(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
var destsheet=SpreadsheetApp.openById(“MYID在这里”).getSheetByName(“Items”);
var destLastRow=destsheet.getLastRow();
var destRange=destsheet.getRange(1,9,destLastRow);
var dataLastRow=sheet1.getLastRow();
var dataRange=sheet1.getRange(1,9,dataLastRow);
var data=dataRange.getValues();
对于(变量i=0;i0){
var targetLastRow=destsheet.getLastRow()+1;
var测试=destsheet.getRange(1,9,TargetStarRow);
表1.获取值(测试).设置值(表1.获取范围(i+1,1,1,9))
}
}
}
问题:
setValue()
设置“范围”而不是实际值
原因: 首先,将范围而不是值传递给
setValue()
解决方案:
函数up4Grabs(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
var destsheet=SpreadsheetApp.openById(“我的ID在这里”).getSheetByName(“项目”);
var destLastRow=destsheet.getLastRow();
var destRange=destsheet.getRange(1,9,destLastRow);
var dataLastRow=sheet1.getLastRow();
var dataRange=sheet1.getRange(1,9,dataLastRow);
var data=dataRange.getValues();
对于(变量i=0;i0){
var targetLastRow=destsheet.getLastRow()+1;
var values=sheet1.getRange(i+1,1,1,9).getValues();
destsheet.getRange(1,9,value.length,9).setValues(value);
}
}
}
由于要设置整个范围的值,因此需要使用setValues()
而不是setValue()
,注意:复数而不是单数。我还将getValues()
添加到您已经提取的范围中,这将返回范围内的值数组,然后可以将该数组传递到setValues()
问题:
setValue()
设置“范围”而不是实际值
原因: 首先,将范围而不是值传递给
setValue()
解决方案:
函数up4Grabs(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
var destsheet=SpreadsheetApp.openById(“我的ID在这里”).getSheetByName(“项目”);
var destLastRow=destsheet.getLastRow();
var destRange=destsheet.getRange(1,9,destLastRow);
var dataLastRow=sheet1.getLastRow();
var dataRange=sheet1.getRange(1,9,dataLastRow);
var data=dataRange.getValues();
对于(变量i=0;i0){
var targetLastRow=destsheet.getLastRow()+1;
var values=sheet1.getRange(i+1,1,1,9).getValues();
destsheet.getRange(1,9,value.length,9).setValues(value);
}
}
}
由于要设置整个范围的值,因此需要使用
setValues()
而不是setValue()
,注意:复数而不是单数。我还将getValues()
添加到您已经拉取的范围中,这将返回范围内的值数组,然后可以传递到setValues()
尝试使用setValues()
注意:复数,并确保在setValues()
范围内使用getValues()
。此时,您正在将一个范围传递给setValue()
,这就是它只是设置“范围”的原因。我收到TypeError:在对象表中找不到函数GetValue。-尝试您的建议更新我的代码我将发布代码示例作为答案。尝试使用setValues()
注意:复数,并确保在setValues()
范围内使用getValues()
。此时,您正在将一个范围传递给setValue()
,这就是它只是设置“范围”的原因。我收到TypeError:在对象表中找不到函数GetValue。-尝试您的建议更新我的代码我将发布代码示例作为答案。数据中的行数与范围中的行数不匹配。数据有1,但范围有5。(第91行,文件“Code”)我对代码进行了更改,现在在一个单独的变量中定义了值,然后使用values.length
,根据值数组的大小计算范围的大小,请重试。关于列,现在仍然看到此错误-数据中的列数与范围中的列数不匹配。数据有9个,但范围有1个。(第94行,文件“代码”)您在回答中使用的是最新版本吗?该范围在提供的答案中有9列。这是一个很容易犯的错误,而不是将值传递给setValues()
您传递的是一个范围,这就是为什么它设置的是“范围”,而不是您期望的值。数据中的行数与范围中的行数不匹配。数据有1,但范围有5。(第91行,文件“Code”)我对代码进行了更改,现在在一个单独的变量中定义了值,然后使用values.length
,根据值数组的大小计算范围的大小,请重试。关于列,现在仍然看到此错误-数据中的列数与范围中的列数不匹配。数据有9个,但范围有1个。(第94行,文件“代码”)您在回答中使用的是最新版本吗?该范围在提供的答案中有9列。这是一个很容易犯的错误,而不是将值传递给setValues()<
function up4Grabs() {
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
var destsheet = SpreadsheetApp.openById("MY ID GOES HERE").getSheetByName('Items');
var destLastRow = destsheet.getLastRow();
var destRange = destsheet.getRange(1,9,destLastRow);
var dataLastRow = sheet1.getLastRow();
var dataRange = sheet1.getRange(1,9,dataLastRow);
var data = dataRange.getValues();
for(var i = 0; i < data.length; i++) {
if (data[i] > 0) {
var targetLastRow = destsheet.getLastRow() + 1;
var values = sheet1.getRange(i+1,1,1,9).getValues();
destsheet.getRange(1,9,values.length,9).setValues(values);
}
}
}