2015-09-03 74 views
0

我放在一起这个测试:谷歌工作表复制行,以不同的电子表格

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

的功能:在列表选项卡,当您更改列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); 
    } 
    } 
} 

已经取得了一些变化,从而不被更新的意见。

回答

0

您可以将图纸复制到其他电子表格中,但是(据我所知,基于我收到的文档和错误),您无法将范围复制到单独的电子表格中。我有一个类似用途的情况下给你,我的解决方法是将我想要复制到一个单独的表是什么,然后将该表复制到新的/其他电子表格:

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); 

希望这有助于让你在正确的方向前进......

0

我相信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有解释。