首页 > 解决方案 > 谷歌脚本将数据从一张表传输到另一张表

问题描述

我希望有人能帮助我编写一个用于 Google 表格的 Google 脚本(除非它可以使用标准公式字符串来完成)。

我想要一个脚本来在“Sheet1”的指定列中搜索特定的“文本值”,如果找到“文本值”,则该“行”中的数据将传输到第一个可用行中的“Sheet2”。然后,将数据传输到“Sheet2”后,删除“Sheet1”中包含数据的行。

*注意,“Sheet2”的标题比“Sheet1”少。我只想要“sheet1”中与“sheet2”具有相同标题的数据 这是一个示例工作簿。数据传输如果 F 列中的“文本”“丢失”,则将该行中的数据传输到“sheet2”,但仅传输与“sheet2”中的标题相关的数据。

我是 Scripts 和 VBA 的新手,如果有人愿意提供任何帮助,我将不胜感激。

非常感谢您!

-杰西

标签: google-apps-scriptdata-transfer

解决方案


查找、移动和删除

txt是要搜索的文本

col是要搜索的列名

function findMoveDelete(txt,col) {
  var txt=txt||'Hoover';//search text
  var col=col||'Location';//column name
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var dsh=ss.getSheetByName('Sheet2');
  var dHdrToIdx={dhA:[]};
  dHdrToIdx.dhA=dsh.getRange(1,1,1,dsh.getLastColumn()).getValues()[0];
  dHdrToIdx.dhA.forEach(function(hdr,i){dHdrToIdx[hdr]=i;});
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var sHdrToIdx={shA:[]};
  sHdrToIdx.shA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  sHdrToIdx.shA.forEach(function(hdr,i){sHdrToIdx[hdr]=i;});
  var vA=rg.getValues();
  var d=0;
  for(var i=0;i<vA.length;i++) {
    //Find
    if(vA[i][sHdrToIdx[col]]==txt) {
      var row=[];
      dHdrToIdx.dhA.forEach(function(dhdr,j){
        row.push(vA[i][sHdrToIdx[dHdrToIdx.dhA[j]]]);
      });
      dsh.appendRow(row);//Move
      sh.deleteRow(i+2-d++);//Delete
    }
  }
}

运行后的表格 1 和 2:

在此处输入图像描述

在此处输入图像描述

您必须在 sheet1 和 sheet2 中具有相同的标题。您可以按照您喜欢的任何顺序放置它们,但它们在两张纸中必须相同。


推荐阅读