谷歌脚本:有条件由一个片在同一个电子表格复制行到另一(Google Script: Conditio

2019-07-19 03:50发布

我读谷歌脚本:有条件从一个电子表格中复制行到另一个 ,不能让它为我工作。

我需要一个脚本,让我做下面引用的文本。 请随时编辑我的电子表格做一个完整的工作脚本。 我将保持公开的电子表格供任何人复制该脚本供自己使用。 我真的什么都不知道剧本创作,所以我需要它的所有拼写出来。 对不起,我这一切这样的小白,但是这将帮助我学习。

https://docs.google.com/spreadsheet/ccc?key=0AoJdwy8V1ldHdFA5M1M1Wlp1NHZhcmxJOUZKVEU4X3c&usp=sharing

如果表列B“All_Mileage”说:“约翰”,那么我想该行被复制并粘贴到表“约翰”开始3行以后。

如果表“All_Mileage”列B说:“亚当”,那么我想该行被复制并粘贴到表“亚当”开始3行以后。

如果表列B“All_Mileage”说:“迈克”,那么我想该行被复制并粘贴到表“迈克”开始3行以后。

我看到这里的其他脚本,但我不能让他们的工作。 就像我说的,我比一棵树更环保的时候才来的代码。

万分感谢!

Answer 1:

C.Lang是正确的,这是不是让现成的脚本的地方......但是,因为这个问题是如此普遍,并已aswered所以常常我花了几分钟时间编写和测试......所以它是:

var ss=SpreadsheetApp.getActiveSpreadsheet();// some global variables
var master = ss.getSheetByName('All_Mileage');
var colWidth = master.getMaxColumns();


    function copyRowsOnCondition() {
      var data = master.getDataRange().getValues();
      for(n=2;n<data.length;++n){
        if(data[n][1].length<16){ // if not pre-filled with your text
        Logger.log(data[n][1])
         var dest = ss.getSheetByName(data[n][1].toString().replace(/ /g,''));//remove any spaces that could be included in the name so the name = sheetName for sure
         var destRange = dest.getRange(dest.getLastRow()+1,1);// the place to write
         master.getRange(n+1,1,1,colWidth).copyTo(destRange);the copy itself value & format
         }
      }// loop
    }

编辑:因为我使用MasterSheet名义价值找到我以为目的地表可能是有用的处理,其中目的地片doen't通过使用相同的规则,即创造它存在的情况下。 name = sheetName ...

另一个问题是,有没有办法知道哪些行已已经复制...所以我提出,处理这一切,仅复制手动选择(即使在只一列)的行版本,并更改​​背景颜色来告诉这些行已被处理。 我还添加了菜单最小舒适;-)

(如何保持忙碌在一个寒冷的周日下午;-)

var ss=SpreadsheetApp.getActiveSpreadsheet();
var master = ss.getSheetByName('All_Mileage');
var colWidth = master.getLastColumn();// last used col in masterSheet
var sheets = ss.getSheets();// number of sheets

function onOpen() {
  var menuEntries = [ {name: "Copy selected Rows to sheets", functionName: "copyRowsOnConditionV2"},

                     ];
  ss.addMenu("Copy functions",menuEntries);// custom menu
}
function copyRowsOnConditionV2() {
  var sheetNames = [];// array of existing sheet names
  var sheets = ss.getSheets();// number of sheets
  for(s=0;s<sheets.length;++s){sheetNames.push(sheets[s].getName())};
  ss.getActiveSelection().setBackground('#ffffbb'); 
  var selectedfirstRow = ss.getActiveSelection().getRowIndex();
  var selectedHeigth = ss.getActiveSelection().getHeight()
  var selectedFullRange = master.getRange(selectedfirstRow,1,selectedHeigth,colWidth);
  var data = selectedFullRange.getValues();
  for(n=0;n<data.length;++n){
    if(data[n][1].length<16){
     if(sheetNames.toString().match(data[n][1].toString().replace(/ /g,''))!=data[n][1].toString().replace(/ /g,'')){// if no sheet exist with this name
     var newSheet = ss.insertSheet(data[n][1].toString().replace(/ /g,''),ss.getSheets().length);// then create it
     master.getRange(1,1,2,colWidth).copyTo(newSheet.getRange(1,1));// and copy the headers on 2 first rows, then continue as usual
     newSheet.getRange(1,1).setValue('Gas Mileage Log - '+data[n][1].toString().replace(/ /g,''));// set name in header
     SpreadsheetApp.flush();
     var sheets = ss.getSheets();// number of sheets
     var sheetNames = [];// update array of existing sheet names
     for(s=1;s<sheets.length;++s){sheetNames.push(sheets[s].getName())};
     Logger.log(sheetNames)
     };
     var dest = ss.getSheetByName(data[n][1].toString().replace(/ /g,''));//find the destination sheet
     Logger.log(data[n][1].toString().replace(/ /g,''))
     var destRange = dest.getRange(dest.getLastRow()+1,1);// define range
     master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row
     }
  }
}

示意图下:



文章来源: Google Script: Conditionally copy rows from one sheet to another in the same spreadsheet