我正在尝试扩展脚本: “教程:使用JavaScript对象编写电子表格数据” https://developers.google.com/apps-script/articles/writing_spreadsheet_data
我已将此脚本实施到我们自己的电子表格中,并且能够阅读我们的源电子表格并写入目标电子表格。不幸的是,我已达到该教程的极限,这恰好与我对javascript的知识程度相吻合。
我们的目标: 1)我们需要使用一张与部门匹配的工作表写入特定的目标电子表格,而不是将数据写入与本教程中使用的“部门”相匹配的工作表。 2)我们需要循环脚本将每个部门写入一个独特的电子表格。
出于我们的目的,我们有大约100个“部门”,我们正在寻找的结果应该是100个电子表格 - 每个部门1个[就像在教程中创建的表格一样]脚本不需要动态创建新的电子表格,虽然这很酷......我们只需要将其写入适当的电子表格。
非常感谢任何帮助/建议或指示。感谢
答案 0 :(得分:0)
您需要存储的内容是从部门名称到电子表格ID的映射。这可以通过在主电子表格中创建包含该映射的特殊工作表来完成:
Department Spreadsheet Id
Sales 123
HR 456
当您准备写出数据时,您可以查找给定部门的电子表格ID。您可以使用SpreadsheetApp.openById()打开电子表格并向其写入数据。
答案 1 :(得分:0)
所以我是Javascript,谷歌表和这个网站的新手。但我想我会分享你可能会感兴趣的东西。这是我根据月份将数据从工作表移动到各种目标工作表的脚本。
它的工作方式是逐个浏览targetSheetNames
并查看一些数据的月份值是否与数组中工作表名称的索引号相匹配。
所以在这个例子中,数组从0-11开始,这很方便,因为Javascript中的月份也是0-11。
出于您的目的,您可能需要添加更多位,以检查它是否是正确的数据等。但它为您提供了在同一电子表格中将数据移动到多个工作表的示例。
function splitByMonth(){
var targetSheetNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; // Sheet names, in month order. Order is important. Name is not. Sheets must exist. This will not create them.
var sourceSheet = "Archive"; // Name of sheet with data in it.
var dateColumn = 1; // Column number with date in it. A = 1, B = 2, C = 3, etc
var ss, sheet, values, valuesLength, counter, archive = [];
for (var i = 0; i < targetSheetNames.length; i++){
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName(sourceSheet);
values = sheet.getDataRange().getValues();
valuesLength = values.length;
counter = 1; // This starts at one because it assumes a header row.
archive = [];
while (counter < values.length){
var d = new Date(values[counter][dateColumn - 1]);
var m = d.getMonth();
if (m == i ){
archive.push(values.splice(counter, 1)[0]);
}
else
{
counter++;
}
}
var archiveLength = archive.length;
if (!archiveLength) {continue;}
var dataSs = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet = dataSs.getSheetByName(sourceSheetKeys[i]);
var lastRow = targetSheet.getLastRow();
var requiredRows = lastRow + archiveLength - targetSheet.getMaxRows();
if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows);
targetSheet.getRange(lastRow + 1, 1, archiveLength, archive[0].length).setValues(archive);
}
}