将特定数据从工作表复制到工作表

Posted

技术标签:

【中文标题】将特定数据从工作表复制到工作表【英文标题】:Copy specific data from sheet to sheet 【发布时间】:2020-11-05 15:24:14 【问题描述】:

https://docs.google.com/spreadsheets/d/1mpALs4rdNj-TFFgCQ0CEBP453v-FfQJR_bBxOzQakWU/edit#gid=1256640730

我有一个“主列表”表从 Google 表单 收集数据,我需要脚本将主列表中的数据复制到根据他们的“位置”相关的工作表。

Example 1

表 1:包含所有数据(主列表)名称......地址...... ................位置 玫瑰.......21,Radje Road,88888.........吉打 玫瑰.......21,Radje Road,88888.........吉打 玫瑰.......21,Radje Road,88888............槟城 Stone......5,Jae Road,22222......槟城

表 2:从表 1 复制数据(仅限位置 - 吉打)姓名......地址............ ...................位置 玫瑰.......21,Radje Road,88888.........吉打 Rose.......21,Radje Road,88888.........吉打州

表 3:从表 1 复制数据(仅限位置 - 槟城)姓名......地址............ ...................位置 玫瑰.......21,Radje Road,88888............槟城 Stone......5,Jae Road,22222............槟城

Example 2

表 1:包含所有数据(主列表)姓名.....性别 布莱恩.....男 梅.....女 莉莉.....女 xx.....女 xx.....男

工作表 2:复制工作表 1 中的数据(仅限性别-女性)姓名.....性别 xx.....女 莉莉.....女 梅.....女

工作表 3:复制工作表 1 中的数据(仅限性别-男性)姓名.....性别 布莱恩.....男

  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Master List');
  const shsr=2;//data start row on master list
  const shhr=1;//master list header row
  const hA=sh.getRange(shhr,1,1,sh.getLastColumn()).getValues()[0];
  const vs=sh.getRange(shsr,1,sh.getLastRow()-shsr+1,sh.getLastColumn()).getValues();
  const base='Sheet';
  let shts=ss.getSheets();
  shts.forEach(function(s,i)if(s.getName()!='Master List')ss.deleteSheet(s););//delete all other sheets
  const gvs=sh.getRange(shsr,7,sh.getLastRow()-shsr+1,1).getValues().map(function(r)return r[0]);
  const s=new Set(gvs);
  const g=[...s];//g has unique values now
  g.forEach(function(v,i)
    let nsh=ss.insertSheet(base + String(i+1),i+1);
    let aA=[]
    aA.push(hA);//start with header row
    vs.forEach(function(r,j)
      //compare to column G value
      if(r[6]==v) 
        aA.push(r);//add rows that match
      
    );
    nsh.getRange(1,1,aA.length,aA[0].length).setValues(aA);
    SpreadsheetApp.flush();//not really necessary but fun to watch the progress
  );

【问题讨论】:

我必须为我糟糕的英语水平道歉。不幸的是,来自I need the script to duplicate / transfer / copy the data to another sheet by classification in column G "Location" to the related new sheet.,我无法理解您的目标和当前脚本的问题。那我可以问你关于他们的事吗?例如,通过将脚本添加到您的问题中来解释您的脚本怎么样?您的示例电子表格似乎有脚本。 对不起,我的英语很差...我需要的实际上是将数据从我的主列表“复制”到具有特定位置的新工作表中。 我将用另一个例子来解释,看看你是否明白我的意思.. 表1:包含所有数据(主列表) Bryan 男 Mei 女 Lily 女 xx女性 xx 男性 工作表 2:从工作表 1 复制数据(仅限女性) xx 女性 Lily 女性 Mei 女性 工作表 3:从工作表 1 复制数据(仅限男性) Bryan Male 感谢您回复并添加更多信息。关于共享电子表格中的脚本,我认为使用当前脚本解释当前问题将帮助用户思考解决方案。这个怎么样? 我还没有任何脚本,因为我不知道该怎么做才能得到这个结果...... 【参考方案1】:

试试这个:

function copyDataUniqueToColG() 
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Master List');
  const shsr=2;//data start row on master list
  const shhr=1;//master list header row
  const hA=sh.getRange(shhr,1,1,sh.getLastColumn()).getValues().map(function(r)return[r[1],r[2],r[3],r[4],r[5],r[6]])[0];
  const vs=sh.getRange(shsr,1,sh.getLastRow()-shsr+1,sh.getLastColumn()).getValues();
  const base='Sheet';
  let shts=ss.getSheets();
  //shts.forEach(function(s,i)if(s.getName()!='Master List')ss.deleteSheet(s););//delete all other sheets
  const gvs=sh.getRange(shsr,7,sh.getLastRow()-shsr+1,1).getValues().map(function(r)return r[0]);
  const s=new Set(gvs);
  const g=[...s];//g has unique values now
  g.forEach(function(v,i)
    let sA=[];
    ss.getSheets().forEach(function(obj)sA.push(obj.getName()));
    if(sA.indexOf(v)==-1)ss.insertSheet(v);
    let aA=[]
    aA.push(hA);//start with header row
    vs.forEach(function(r,j)
      //compare to column G value
      if(r[6]==v) 
        aA.push([r[1],r[2],r[3],r[4],r[5],r[6]]);//add rows that match
      
    );
    let dsh=ss.getSheetByName(v);
    dsh.getRange(1,1,aA.length,aA[0].length).setValues(aA);
    SpreadsheetApp.flush();//not really necessary but fun to watch the progress
  );

【讨论】:

嗨 Cooper,非常感谢您的回复,但它对我不起作用.. 我需要的功能实际上是根据他们的“将数据从主列表复制到相关工作表”地点”。 docs.google.com/spreadsheets/d/…您可以使用此共享电子表格编辑脚本。 我的“主列表”用于收集来自不同地方的所有客户数据库,您可以看到我的其他表格,例如“槟城”,“霹雳”,“森美兰”,“马六甲”, "Johor,"Johor Bahru","Kedah", 仍然是空的,所以我需要根据他们的“位置”将客户数据从主列表复制到这些工作表的功能。 我对此进行了测试,它对我有用。此外,我不会关注电子表格的链接。您在问题中需要的所有内容都必须张贴在问题中。不要依赖外部链接。不适合我是什么意思? 无法将源从“主列表”复制并粘贴到其他工作表... 对不起,我不知道该告诉你什么,它对我有用

以上是关于将特定数据从工作表复制到工作表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python(和 DataNitro)将单元格从一个 Excel 工作簿中的特定工作表复制到另一个 Excel 工作簿中的特定工作表

如何在 MS Excel 中将特定数据从一个 Excel 工作表传输到另一个工作表?

在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?

Excel 根据单元格值复制到特定工作表

Excel VBA根据条件从一个工作表复制到其他工作表特定单元格

VBA - 仅将可见单元格从工作表复制到另一个工作表