首页 > 解决方案 > 如何动态地将值放入列中?

问题描述

我正在尝试将某些工作表的名称放在一列中(不包括我不想要的其他工作表的名称)。我已经创建了数组,但是它没有出现。我希望将信息放在A3:A105.

我尝试使用indexOf.

function sheetNames() {
  var out = [];
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var exclude = ["About Me", "Contractors", "All Group Bids", "Bid Summary"];

  var bidsheet = spreadsheet.getSheetByName("Bid Summary");
  var column = bidsheet.getRange(3, 1, 105).getValue(); 

  for (i = 0; i < sheets.length; i++) {
    if (exclude.indexOf(sheets[i].getName()) === -1) 
      {column.setValue(out.push(sheets[i].getName()))};

    return out; 
    }
  }


//Nothing appears in the column.

在此处输入图像描述!

标签: google-apps-scriptgoogle-sheetsindexof

解决方案


乍一看,我认为var column = bidsheet.getRange(3, 1, 105).getValue();可能是问题所在。

尝试取出getValue()零件,column一个Range物体也是如此。然后你可以跟setValue注,或者setValues稍后在那个范围内跟注。

笔记:

  • SetValue采用单个值,并且应该用于由单个单元格组成的范围。例如:

    var cell = sheet.getRange("B2");
    cell.setValue(100);
    
  • SetValues接受一个二维数组的值,并且应该设置在多单元数组上使用。例如:

    var values = [
      [ "2.000", "1,000,000", "$2.99" ]
    ];
    
    var range = sheet.getRange("B2:D2");
    range.setValues(values);
    

与其在每次迭代该循环时调用setValue,不如使用该循环来构建工作表名称数组,然后进行一次调用以setValues将该数据写入您选择的范围。


推荐阅读