0

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

我的问题是每个电子表格上的谷歌 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”中源文件 ID 的位置。

有谁知道某种工作方法,这将帮助我更容易/自动添加新行/客户数据?

谢谢您的帮助!

4

2 回答 2

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 文档

于 2013-09-02T20:22:13.153 回答
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)

    }
}

谢谢你,笨蛋——没有你的帮助,我不会成功!

于 2013-09-13T09:07:14.153 回答