Google电子表格脚本使用javascript将数据写入多个电子表格

时间:2012-05-17 19:45:15

标签: javascript google-sheets google-apps-script

我正在尝试扩展脚本: “教程:使用JavaScript对象编写电子表格数据” https://developers.google.com/apps-script/articles/writing_spreadsheet_data

我已将此脚本实施到我们自己的电子表格中,并且能够阅读我们的源电子表格并写入目标电子表格。不幸的是,我已达到该教程的极限,这恰好与我对javascript的知识程度相吻合。

我们的目标: 1)我们需要使用一张与部门匹配的工作表写入特定的目标电子表格,而不是将数据写入与本教程中使用的“部门”相匹配的工作表。 2)我们需要循环脚本将每个部门写入一个独特的电子表格。

出于我们的目的,我们有大约100个“部门”,我们正在寻找的结果应该是100个电子表格 - 每个部门1个[就像在教程中创建的表格一样]脚本不需要动态创建新的电子表格,虽然这很酷......我们只需要将其写入适当的电子表格。

非常感谢任何帮助/建议或指示。感谢

2 个答案:

答案 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);
 }

}