首页 > 解决方案 > 如何从未知大小的数组中选择一个范围?

问题描述

我想做一个宏来检索另一张表中的数据,但我事先不知道行数,我想恢复行数。数据表每天或每月都有不同的行数,因此我无法提前定义行数。

我尝试使用函数“GetRange”,但没有关于非空单元格的数量来获取非空行的数量。

我也尝试过创建过滤器,但我没有在文档中写入的权限。

function myFunction() {

   // Get the sheet with DATA active 
   var spreadsheet = SpreadsheetApp.getActive();
   spreadsheet.setActiveSheet(spreadsheet.getSheetByName('DataSheet'), true);


//how can i get the Range of the last non empty cells ??
  var range = spreadsheet.getRange("A2:Axxx"); 

//i want to have an integer (number of lines with data)
  var values = range.getValue(); 


// after i do somes operations in these data but it's not important.
  for(var i=2 ; i< values ; i++) {            

      spreadsheet.duplicateActiveSheet();
      spreadsheet.getActiveSheet().setName('Lettre Relance' + i);
      spreadsheet.getRange('C12').activate();
      spreadsheet.getCurrentCell().setFormula('=Relance!A'+i);
  }
}

非常感谢您的回复!

标签: javascriptgoogle-apps-scriptgoogle-sheetsmacros

解决方案


我通常使用简单邮件合并教程中的代码将整个工作表的数据读入对象。您还可以使用Faster 方式中的代码查找第一个空行线程以获取第一个空行,然后将范围设置为该行之前的所有内容。我使用来自@Mogsdad 响应的代码,我在此处复制了该代码:

/**
 * Mogsdad's "whole row" checker.
 */
function getFirstEmptyRowWholeRow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  var row = 0;
  for (var row=0; row<values.length; row++) {
    if (!values[row].join("")) break;
  }
  return (row+1);
}

推荐阅读