电子表格从另一张表复制信息 - Javascript

时间:2018-02-02 08:01:35

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

我正在寻找创建更简单版本的代码的方法。我想,将每张纸上的信息复制到一张纸上。第一张纸的第一个信息,然后是第二张纸的下面等等。现在我有每张纸的代码,是否有任何方法可以让它更容易?应该使用什么代码?在我的代码和绘图下面有解释。

function copy() {
  
 var ur = SpreadsheetApp.getActiveSpreadsheet(); // sheet where we copy data
 var urgents = ur.getSheetByName("List"); 
 var lastRow = urgents.getLastRow();
 var range = urgents.getRange("A2:B");
   range.clear(); // every time script clear data 

 var importsh = SpreadsheetApp.openById('115nqlMpW3dhI-adpWvir5RZeayM01HqvjOcDc2_yLvQ');
 
 var imbrak = importsh.getSheetByName('List_1'); // sheet from  we copy data
 var imbrak2 = importsh.getSheetByName('List_2'); // sheet from we copy data
 var lastcol = importsh.getLastColumn();
 var lastcol2 = imbrak2.getLastColumn();

 var last = imbrak.getLastRow();
 var last2 = imbrak2.getLastRow();

 var urlast = last;
 var urlast2 = last2;

    
var data = imbrak.getRange("A2:B"+last).getValues();
var data2 = imbrak2.getRange("A2:B"+last2).getValues();

  urgents.getRange("A2:B"+last).setValues(data);
  urgents.getRange(getFirstEmptyRowWholeRow3(),1,last2-1,2).setValues(data2);
               
 }

enter image description here

此致

1 个答案:

答案 0 :(得分:1)

这次修改怎么样?请将此视为几个答案之一。

修改要点:

  • 使用数组作为工作表名称。
    • 这样,当它增加工作表数量时,您可以通过将工作表名称导入数组来使用此脚本。
  • 每张纸的所有数据都会导入到数组中。
    • 这样,可以通过setValues()
    • 的一次调用将数据导入目标表

修改后的脚本:

function copy() {
  var ur = SpreadsheetApp.getActiveSpreadsheet(); // sheet where we copy data
  var urgents = ur.getSheetByName("List"); 
  var lastRow = urgents.getLastRow();
  var range = urgents.getRange("A2:B");
  range.clear(); // every time script clear data

  // Added
  var importsh = SpreadsheetApp.openById('115nqlMpW3dhI-adpWvir5RZeayM01HqvjOcDc2_yLvQ');
  var sheets = ['List_1', 'List_2']; // Please import sheet names here.
  var data = [];
  sheets.forEach(function(e){
    var s = importsh.getSheetByName(e);
    var values = s.getRange("A2:B"+s.getLastRow()).getValues();
    Array.prototype.push.apply(data, values);
  });
  urgents.getRange(2, 1, data.length, data[0].length).setValues(data); // Please confirm this range.
}

注意:

  • 请确认urgents.getRange(2, 1, data.length, data[0].length).setValues(data);的范围。因为我没有关于getFirstEmptyRowWholeRow3()的信息。
    • 在当前范围内,数据将导入“A2:B”。

如果我误解了你的问题,请告诉我。我想修改。