【问题标题】:Filter and Copy to sheet过滤并复制到工作表
【发布时间】:2017-05-22 03:12:01
【问题描述】:

我正在使用 Google 表格,其中我在 A 列中有一个列表,其中包含与表格相关的人员及其姓名。在 B 列中,我有应该与他们关联的数据以复制到他们的工作表中。

I have created a sample here to show how it should look. 我还附上了技术上可以满足我需求的代码。唯一需要注意的是,我在复制时无法将名称放入 A 列。此外,为了让它工作,我必须手动选择整个范围,而不是让范围是静态或动态的(直到最后一行数据)。

如何更改下面(也在工作表中)的代码以满足我的需要?下面的代码假定名称始终在 b 列中,并复制包含该名称的整行,而不仅仅是它旁边的数据。

var ss=SpreadsheetApp.getActiveSpreadsheet();
var master = ss.getSheetByName('Home');
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())};

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

     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-apps-script google-sheets google-apps


    【解决方案1】:

    您需要更改在 for 循环中使用的索引。要引用工作表中的第一列,请使用索引 0。

    for(n=0;n<data.length;++n){
        if(data[n][0].length<16){ //index 0 refers to column A
    
         var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet
         Logger.log(data[n][0].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
         }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多