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

Google Spreadsheet Script Write Data to Multiple Spreadsheets using javascript

本文关键字:电子表格 数据 脚本 使用 javascript Google      更新时间:2023-09-26

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

我已经在我们自己的电子表格上实现了这个脚本,并且能够读取我们的源电子表格并写入目标电子表格。不幸的是,我已经达到了该教程的极限,这与我对javascript的了解程度完全吻合。

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

出于我们的目的,我们有大约 100 个"部门",我们正在寻找的结果应该是 100 个电子表格 - 每个部门 1 个 [就像教程中创建的工作表] 该脚本不需要动态创建新的电子表格,尽管那会很酷......我们只需要让它写入适当的电子表格。

任何帮助/建议或指导将不胜感激。 谢谢

您需要

存储在某个地方是从部门名称到电子表格 ID 的映射。这可以通过在主电子表格中创建一个包含该映射的特殊工作表来完成:

Department     Spreadsheet Id
Sales          123
HR             456

当您准备好写出数据时,您可以查找给定部门的电子表格 ID。您可以使用 SpreadsheetApp.openById(( 打开电子表格并向其中写入数据。

所以我是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);
 }
}