Google电子表格ImportRange - 需要改进我的解决方法

时间:2013-09-02 09:14:12

标签: javascript google-apps-script

我对这个论坛以及google脚本都很陌生。我从未真正学过JavaScript或任何其他编程语言,但是当我选择谷歌应用程序作为我的小型企业的主要平台时,我被迫开始使用。

我的问题是在每个电子表格上google ImportRange功能限制为50。我创建了一个模型,每个客户都有自己的电子表格,其中包含个人数据,截止日期等,位于谷歌驱动器的自己的文件夹中。

我还创建了一个名为" Organizer"的电子表格,Organizer有两个功能 -

1)使用autoCrat脚本创建自动对应, 2)显示每个客户的截止日期并按优先级排序。

因此,我需要能够将所有客户电子表格中的数据共享/导入/复制到"管理器"。因为有50多个客户电子表格,我不得不放弃ImportRange功能而不是我使用简单的脚本直接从每个电子表格复制文件:

function ImportDataRange() {

// rown number.1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Databaze");
var range = sheet.getRange(2, 1)
var id = range.getValue()
var ssraw = SpreadsheetApp.openById(id);
var sheetraw = ssraw.getSheetByName("Raw");
var range = sheetraw.getRange("A2:AB2");
var data = range.getValues();

sheet.getRange("B2:AC2").setValues(data)

// row number.2
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Databaze");
var range = sheet.getRange(3, 1)
var id = range.getValue()
var ssraw = SpreadsheetApp.openById(id);
var sheetraw = ssraw.getSheetByName("Raw");
var range = sheetraw.getRange("A2:AB2");
var data = range.getValues();

sheet.getRange("B3:AC3").setValues(data)
}

这个脚本实际上效果很好,但问题是,当我想将新的客户电子表格添加到" Organizer"使用这种方法,我必须为每个新行手动添加整个代码的新副本,并在" Organizer"中更改导入数据的输出范围和源文件ID的位置。

有没有人知道某种workaroud,这有助于我更容易/自动地添加新的行/客户数据?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您将要使用某种循环。 我没有测试下面的代码,但根据您的示例,我认为这应该适合您。

function ImportOtherSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Databaze");

  // Get the first column
  // lastRow() - 1 because we're starting at row 2
  var sheetIds = sheet.getRange(2, 1, sheet.getLastRow() - 1);

  // For each ID in the id column
  for (var i = 0; i < sheetIds.length; i++) {
    var id = sheetIds[i]; // Get the id from the Array

    // Get the new sheet, range and values
    var ssraw = SpreadsheetApp.openById(id);
    var sheetraw = ssraw.getSheetByName("Raw");
    var range = sheetraw.getRange("A2:AB2");
    var data = range.getValues();

    // Get the local range, and write the values
  sheet.getRange(i + 1, 2, 1, data[0].length).setValues(data)
  }
}

当您了解有关GAS和JS的更多信息时,请充分利用MDNGAS Documentation

答案 1 :(得分:0)

我使用了fooby代码,经过长时间的反复试验,我找到了适用于我的代码,所以如果有人有兴趣,请点击这里:

function ShowDataFromOtherSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Databaze");

var ids = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues();

for (var i = 0; i < ids.length; i++) {
var id = ids[i];

var ssraw = SpreadsheetApp.openById(id);
var sheetraw = ssraw.getSheetByName("Raw");
var range = sheetraw.getRange("A2:AB2");
var data = range.getValues();

sheet.getRange(i + 2, 2, 1, data[0].length).setValues(data)

    }
}

谢谢你的愚蠢 - 没有你的帮助我不会成功!