【问题标题】:Google Sheet Copy rows to different spreadsheetsGoogle Sheet 将行复制到不同的电子表格
【发布时间】:2015-09-03 10:46:47
【问题描述】:

我把这个测试放在一起:

https://docs.google.com/a/strandvinduspuss.no/spreadsheets/d/1WZTYq-WiQq8asXZjHMMN9bsGiQKbPKmlRrsnkAsadU4/edit?usp=sharing

功能:在List选项卡中,更改col B的名称时,将部分行复制到匹配的工作表中。

我需要将它们复制到单独的电子表格中(每个雇主一个)。这可能吗?

我的代码:

// http://victorwyee.com/gapps/move-row-on-cell-value-google-spreadsheets/
   /**
    * Moves row of data to another spreadsheet based on criteria in column 6.
    * Each spreadsheet can be a "source" spreadsheet, or the "target"    spreadsheet.
    * Assumes there as many spreadsheets as there are criteria values, e.g.
    *   if the criteria are "R", "P", and "D", then there are three spreadsheets
    *   named "R", "P" and "D".
    * Assumes that each spreadsheet has the same structure.
    */

  function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  // Get the row and column of the active cell.
  var rowIndex = r.getRowIndex();
  var colIndex = r.getColumnIndex();

  // Get the number of columns in the active sheet.
  var colNumber = s.getLastColumn();

   // Move row based on criteria in column 6, and if row is not the header.
  if (colIndex == 2 && rowIndex != 1) {

    // Get value from column 6, in the active row.
    var status = s.getRange(rowIndex, colIndex).getValue();

    // Do nothing if criteria value is not actually changed to something else.
    if (s.getName() != status) { 

      // The target sheet is the one with the same name as the criteria value.
      var targetSheet = ss.getSheetByName(status);
      var target = targetSheet.getRange(targetSheet.getLastRow() +1, 1);

      // Set the range and copy
      // s.getRange(rowIndex, 10, 1, colNumber).copyTo(target);
      targetSheet.insertRowsAfter(targetSheet.getLastRow(), 1);
      s.getRange(rowIndex, 1, 1, 16).copyTo(target);

      // s.deleteRow(rowIndex);
    }
  }
}

已进行了一些更改,因此 cmets 不会更新。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您可以将工作表复制到其他电子表格,但是(据我所知,根据我收到的文档和错误)您不能将范围复制到单独的电子表格。我有一个与您类似的用例,我的解决方法是将要复制的内容移至单独的工作表,然后将该工作表复制到新的/其他电子表格:

    var newSpreadsheet = SpreadsheetApp.create("I am a copy");
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy Me");
    sheet.copyTo(newSpreadsheet);
    

    如果您需要在将数据移动到的位置保留相同的工作表/数据,这在您的情况下不起作用,因为它会被覆盖。在这种情况下,一个选项是复制工作表,然后移动您想要的任何数据,然后删除多余的工作表。

    var newSpreadsheet = SpreadsheetApp.create("I am a copy");
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
    var projectname = SpreadsheetApp.getActiveSpreadsheet();
    sheet.copyTo(newSpreadsheet);
    
    var dest = newSpreadsheet.getSheetByName("Copy of Sheet1").getRange("E7");
    newSpreadsheet.getSheetByName("Copy of Sheet1").getRange("B1").copyTo(dest);
    
    var notNeeded = newSpreadsheet.getSheetByName("Copy of Sheet1");
    newSpreadsheet.deleteSheet(notNeeded);
    

    希望这可以帮助您朝着正确的方向前进...

    【讨论】:

      【解决方案2】:

      我相信copyTo 在不同的电子表格之间不起作用。您可以使用getValuesetValue 将信息复制过来。

      代替s.getRange(rowIndex, 1, 1, 16).copyTo(target);试试:

      var values = s.getRange(rowIndex, 1, 1, 16).getValue();
      targetSheet.getRange(target).setValue(values);

      查看range documentation page了解更多信息,那里有setValuegetValue的解释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2017-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多