首页 > 解决方案 > 如何使用工作表名称作为条件将数据从一个 Google 工作表复制到同一文件中的另一个工作表并根据过滤条件查找工作表

问题描述

我正在尝试使用工作表名称过滤数据,然后将该过滤器数据复制到我用作过滤名称的工作表中。我想从“Hirtory1”列中过滤数据 I. 这个想法是因为在“history1”选项卡之后给出的每个选项卡名称都应该用作过滤条件。根据选项卡名称过滤数据后,应将数据复制到下一个空白行并自动逐个自动转到该特定工作表。我正在尝试使用以下宏,但它无法正常工作。

function CopyDAta() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A:I').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('I1'));
  spreadsheet.getRange('A:I').createFilter();
  spreadsheet.getRange('I1').activate();
  var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains(sheetName())
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(9, criteria);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FTM'), true);
  spreadsheet.getRange('A2').activate();
  spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
  spreadsheet.getRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

这是 Google 工作表的链接。 谷歌表链接

一步一步的想法如下。

  1. 数据表的完整视图
  2. 我在 History1 数据上应用了过滤器“FTM”并将该数据复制到下一个选项卡标题中粘贴为“FTM”

我上面的代码只适用于一个标签。我想要一种单击并将数据发送到所有选项卡的方式。我应用的过滤器基于选项卡名称。如果您看到过滤条件“FTM”也与选项卡名称“FTM”相同。因此,代码将首先过滤“历史记录”选项卡中的“FTM”,然后搜索“FTM”选项卡在整个 Google 表格中的位置,并将数据粘贴到下一个空行中。同样,每个选项卡都将根据其名称过滤条件从 history1 工作表中获取数据,并将其填充到相关工作表中。我的代码正在运行,但它不会搜索工作表并且不会自动粘贴。我想自动化它,但不知道如何?

请指导我接下来需要做什么。谢谢

标签: google-apps-scriptgoogle-sheets

解决方案


PL。试试这个代码

function split_history(){
  var ss=SpreadsheetApp.getActive();
  var hissht=ss.getSheetByName("History1");
  var hisvals=hissht.getDataRange().getValues();
  var sheets=ss.getSheets();
  for (i=0;i<sheets.length;i++){
    //
  }
  var xrp=[];
  var bnb=[];
  for (j=1;j<hisvals.length;j++){
    if (hisvals[j][8]=="XRP"){
      xrp.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3]]) ; //modify it as per your need
    }
    if (hisvals[j][8]=="BNB"){
      bnb.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3]])
    }

    //add all sections here

  }

  var xrpsht=ss.getSheetByName("XRP");
  var xrplr=xrpsht.getLastRow();
  xrpsht.getRange(xrplr+1,1,xrp.length,4).setValues(xrp); //i have used only 4 columns A,B,C,D - you can modify it

  var bnbsht=ss.getSheetByName("BNB");
  var bnblr=bnbsht.getLastRow();
  bnbsht.getRange(bnblr+1,1,bnb.length,4).setValue(bnb);

  //add other sections as per your need
  
}
````

推荐阅读