【问题标题】:how to select a range from an array of unknown size?如何从未知大小的数组中选择一个范围?
【发布时间】:2019-09-07 13:04:04
【问题描述】:

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

我尝试使用函数“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);
  }
}

非常感谢您的回复!

【问题讨论】:

    标签: javascript google-apps-script google-sheets macros


    【解决方案1】:

    我通常使用Simple Mail Merge tutorial 中的代码将整个工作表的数据读入一个对象。您还可以使用Faster way to find the first empty row 线程中的代码来获取第一个空行,然后将您的范围设置为该行之前的所有内容。我使用来自@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);
    }
    

    【讨论】:

      【解决方案2】:

      这是一个非常通用的函数,它可以在事先不知道数据数组维度的情况下将数据写入工作表中。

      诀窍是将数据存储在数组中,然后计算数组大小和维度,然后将这些值用作行数和列数。

      
      function writeToSheet(dataToWrite){
        if (dataToWrite.length > 0){
      
          // Set the required range dimension
          var dimension ={};
          dimension.rows = dataToWrite.length;
          dimension.columns = dataToWrite[0].length;
      
          // Select the Sheet
          var document = SpreadsheetApp.getActive();
          var sheet = document.getSheetByName("SheetName"); 
      
          //  activate the sheet
          document.setActiveSheet(sheet);
      
         // it starts writing in the first cell of the second row. Update the starting row/column value below to change that.
          var range = sheet.getRange(2, 1, dimension.rows, dimension.columns);
          range.setValues(dataToWrite);
          SpreadsheetApp.flush();
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-24
        • 2020-12-18
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 1970-01-01
        相关资源
        最近更新 更多