【问题标题】:I need to copy data from 3 sheets to another master sheet in same spreadsheet我需要将数据从 3 张表复制到同一电子表格中的另一张主表
【发布时间】:2012-08-10 09:39:18
【问题描述】:

我已经为此编写了代码,但出现错误

The coordinates or dimensions of the range are invalid. (line 44)

代码:

function updateMaster() {
var repArray  = new Array();
 var ss        = SpreadsheetApp.getActiveSpreadsheet();
 var allSheets = ss.getSheets();
 // build array of all sheets
 for (i in allSheets) {                              
   if ((allSheets[i].getName()).match(/.*?\-Rep$/))
      {repArray.push(allSheets[i].getName());}
 }

 // store all sheets in array
 var sheetArray = [];   
 // loop through all rep sheets                             
 for (var j in repArray) {       
   // get each sheet                    
   var tempSheet  = ss.getSheetByName(repArray[j]);  
       // get sheet data
   var dataRange  = tempSheet.getDataRange().getValues(); 
   // remove the first header row
   dataRange.splice(parseInt(0), 1);                 
       // append sheet data to array
   var sheetArray = sheetArray.concat(dataRange);    
 }

 // Time to update the master sheet
 var mSheet    = ss.getSheetByName("summary");        
 // save top header row
 var headerRow = mSheet.getRange(1,1,1,12).getValues(); 
 // clear the whole sheet
 mSheet.clear({contentsOnly:true});                 
 // put back the header row 
 mSheet.getRange(1, 1, 1, 12).setValues(headerRow); 

这是我在写入主表时出错的地方:

 // write to the Master sheet via the array 
 mSheet.getRange(2, 1, sheetArray.length, 12).setValues(sheetArray);
  // force spreadsheet updates
 SpreadsheetApp.flush();                   
 // pause (1,000 milliseconds = 1 second)          
 Utilities.sleep("200");                             

 // delete empty rows at bottom
 var last = mSheet.getLastRow();                     
 var max  = mSheet.getMaxRows();
 if (last !== max) {mSheet.deleteRows(last+1,max-last);}

}

我无法找出错误。

【问题讨论】:

  • 先猜你是要删除越界的行,或者是无效的数字,last和max的值是多少?
  • 留下没有给出任何错误的部分,它在 mSheet.getRange(2, 1, sheetArray.length, 12).setValues(sheetArray);该范围的坐标或尺寸无效。
  • 你说“这是我得到错误的地方”让我很困惑,然后又放了一段代码。现在这更清楚了:您不必获取具有列数/行数的范围来设置数据,只需使用具有行和列引用的范围,如下所示:mSheet.getRange(1,1).setValues( headerRow);
  • 我试过当我使用 mSheet.getRange(2, 1).setValues(sheetArray);我收到错误“范围高度不正确,为 0 但应为 1”
  • 取决于您需要放入的内容:sheetArray 或 headerRow。在您的问题中,它指出: setValues(headerRow) 并在您之前的评论中说: setValues(sheetArray).

标签: google-apps-script google-sheets google-sheets-api


【解决方案1】:

您需要一张名称中包含“Rep”的工作表。

"第一个数组存储所有销售代表工作表。由于某些工作表可能不是销售代表工作表,因此脚本仅在工作表名称具有“-Rep”后缀时存储工作表(例如“JohnDoe-Rep”) "

代码来源:http://blog.ditoweb.com/2012/01/consolidate-spreadsheet-sheets-with.html

这就是它不起作用的原因。

【讨论】:

    【解决方案2】:

    mSheet.getRange(2, 1, sheetArray.length, 12).setValues(sheetArray)

    我遇到了同样的问题,并按照“Rep”解决方案解决了这个问题。然后我遇到了另一个问题,并意识到我的列数不同......所以只需返回并将第 12 行更改为工作表中的行数。

    还要尽量保持所有工作表的格式相同。

    重命名您希望数据组合的工作表

    【讨论】:

      猜你喜欢
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多