试图将我的Google表格中的命名范围列表写到单独的表格中

问题描述 投票:0回答:1

我是编码新手。我有一个Google表格,其中包含314个命名范围变量。我正在尝试将所有命名范围的顶点列表打印到工作簿中的单独工作表中。我得到的错误令人困惑。它显示为

例外:数据中的行数与范围内的行数不匹配。数据为1,但范围为314。(第47行,文件“代码”)

这是我的代码。我不确定我缺少什么?

function myFunction() {

//Declaring the Active Sheet
var mySheet = SpreadsheetApp.getActiveSheet();

//Declaring Array 
var myArray = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();

//Clearing a range on the Google Sheet
mySheet.getRange('Named Ranges!A1:A314').clearContent();

//Printing Array to Google Sheet
mySheet.getRange('Named Ranges!A1:A314').setValues([myArray]);  

}
google-apps-script google-sheets named-ranges
1个回答
0
投票

方法getNamedRanges()返回范围对象而不是它们的名称,并且setValues仅在值的尺寸对应于范围的尺寸时才有效

  • 要检索名称范围,您需要遍历所有范围对象并使用getName()检索每个单个范围的名称>
  • [getName()将具有内容[myArray],该内容将被解释为嵌套数组,其中将包含多列,仅一行]
  • 要创建一个多列且只有一行的数组,您可以执行以下操作:
[[range1, range2, ...]]
  • 鉴于工作表 var myRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges(); Logger.log(myRanges); var myArray = []; for (var i = 0; i< myRanges.length; i++){ myArray[i] = []; myArray[i].push(myRanges[i].getName()); } 始终是活动工作表,可以在mySheet中指定其他工作表名称。而是指定任一
getRange()

甚至可以动态地更好:

SpreadsheetApp.getActiveSpreadsheet().getRange('Named Ranges!A1:A314')
  • 由于数据中的行数和列数必须与该范围内的行数相匹配,因此后一种方法使您可以动态地估计与列表条目数相对应的行数,而无论命名范围。
  • 在用var myRangeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Named Ranges'); myRangeSheet.getRange(1,1, myArray.length, 1) 覆盖最终数据之前不必clearContent()
  • 您对代码的示例修改:

setValues
© www.soinside.com 2019 - 2024. All rights reserved.