将特定数据从续订数据导入多个电子表格

时间:2016-12-24 12:13:54

标签: google-apps-script google-sheets

我已经搜索过,但我无法找到解决方案,但我相信它应该在这里。也许,我用来搜索的关键字不正确。

问题:

我想从名为" New Data"的电子表格表中导入(捕获)引用区域A的数据。该表每2个工作日更新一次。

https://docs.google.com/spreadsheets/d/1WRFvZ5XXpf06WPgC70KRtGi5_hmGKZXFiFYcW806_uk/edit?usp=drivesdk

并将这些新行添加到名为Region A的电子表格中,该电子表格已经拥有了自己的数据。

https://docs.google.com/spreadsheets/d/1c_SBGjUNOr2Oi2tpCVlmD0e1x1Ov52khJYN5jcm8Mf8/edit?usp=drivesdk

我尝试了什么:

Importrange函数效果很好,但还不够。我必须打开Region A Spreadsheet并在表的末尾编写函数,然后复制粘贴结果也适用于6个区域的所有Spreadsheet文档,如示例中所示(在现实生活中大约为50)。然后在2天内从"新数据"中获取renewe数据。桌子和copypaste它。

有没有办法应用一个可以添加行的脚本(从New Data到Region A表)来解决问题?

谢谢!

2016年12月26日更新:请参阅下面的评论,我无法解决一个问题

1 个答案:

答案 0 :(得分:0)

有点不清楚,但听起来像是查询每个区域的数据,所以对于区域A尝试:

 =query(IMPORTRANGE("1WRFvZ5XXpf06WPgC70KRtGi5_hmGKZXFiFYcW806_uk","Sheet Name!A1:D"),"where Col1 contains 'Region A'")

只需更改工作表名称!上述

编辑#2

基于要求不附加行的评论:

function regionA() {
  // Data Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var data = dataSheet.getDataRange().getValues();

  //Code for Region A
  var regionAId = ""
  var regionA = "Region A";
  var regionAdata = SpreadsheetApp.openById(regionAId).getSheets()[0];
  var column = regionAdata.getRange('A2:A');
  var values = column.getValues(); 
  var ct = 1;
  while ( values[ct] && values[ct][0] != "" ) {
    ct++;
  }

  for ( var i=0; i < data.length; i++) {
    if (data[i][0] == regionA){
      regionAdata.getRange(ct+2,1,1,4).setValues([data[i].slice(0, 4)]);
      ct++
    } 
  }
}

编辑#1

追加一行

根据您的评论,您可以在newData文件中使用此脚本,而不是报告文件。

  function myFunction() {
  // Data Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var data = dataSheet.getDataRange().getValues();

  //You can change these for each Region
  var regionAId = "SPREADSHEET KEY for RegionA"
  var regionA = "Region A";
  var regionAdata = SpreadsheetApp.openById(regionAId);
  var regionBId = "SPREADSHEET KEY for RegionB"
  var regionB = "Region B";
  var regionBdata = SpreadsheetApp.openById(regionBId);
  //add the other regions

  for ( var i=0; i < data.length; i++) {
    if (data[i][0] == regionA){
      regionAdata.appendRow(data[i])
    }     
    if (data[i][0] == regionB){
      regionBdata.appendRow(data[i])
    }    
    //add the other regions
  }
}

这不是那么干净,因为我做得很快,但按照模式添加其他区域,一切都将立即完成。