我对这个论坛以及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,这有助于我更容易/自动地添加新的行/客户数据?
感谢您的帮助!
答案 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的更多信息时,请充分利用MDN和GAS 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)
}
}
谢谢你的愚蠢 - 没有你的帮助我不会成功!