使用 Google Sheets Apps 脚本根据未知数量的行中的过滤关键字移动特定行

我做搜索引擎优化,因此我有很多关键字在不同的电子表格中流动。我想要一种方法来根据特定的过滤器将这些过滤到单独的工作表中,但我一生都无法弄清楚如何在 Google Apps 脚本中执行此操作。

我为自己设定的标准是:

  • 在第 1+2 列中输入字符串及其相应卷的列表。

  • 过滤词列表写在第 3 列中。

  • 该脚本必须为每个过滤词创建一个新工作表,如果字符串包含过滤词,则将字符串+卷移动到这些不同的工作表中。

示例:过滤词:Apple, Banana, Pineapple

字符串:“苹果很大”,卷:“100”

该脚本会将字符串和音量移动到第 1 行名为“Apple”的工作表中

(请注意,我在编码方面毫无经验)我相信您可以使用以下结构:

for(let i = 0; i <= column3RowAmount; i++){ //Run as long as there are more filter words

   create(column3Row[i]); //create a new sheet with the name of the filter word

   for(let j = 0; j <= column1RowAmount; j++){ //Run as long as there are more keywords

      if(column1Row[j].indexOf(column3Row[i]) >= 0){ //If the Row in column 1 contains the filter word

         column1Row[j].moveToSheet(column3Row[i]); // Make sure not to move Column 3, but only 1+2

      }

   }

}

示例表:https://docs.google.com/spreadsheets/d/15YIMyGmmfZdy094gwuJNxFmTd8h7NOLnA8KevZrGtdU/edit? usp=sharing


幕布斯6054654
浏览 109回答 2
2回答

哔哔one

解释:您的目标是为C列中的每个过滤词创建一个工作表。然后将A、B列中的数据复制到相应的工作表中,但仅复制包含过滤词的行。对于初学者,您需要获取过滤词列表。您可以获得C列的完整范围并过滤掉空单元格:const sh_names = sh.getRange('C1:C').getValues().flat().filter(r=>r!='');同样,您需要获取A列和B列中的数据:const data = sh.getRange('A1:B'+sh.getLastRow()).getValues();下一步是迭代sh_names每个元素/过滤词,检查是否存在具有该名称的工作表。如果不存在,则创建一个具有该名称的工作表,如果存在则跳过创建部分:  if(!ss.getSheetByName(s)){   ss.insertSheet().setName(s);}下一步是过滤包含过滤词data的行:let f_data = data.filter(r=>r[0].includes(s));最后检查数据的长度是否大于0,否则没有数据可使用,并将 的值设置data到相应的sheet中:sheet.getRange(sheet.getLastRow()+1,1,f_data.length,f_data[0].length).setValues(f_data)解决方案function myFunction() {  const ss = SpreadsheetApp.getActive();  const sh = ss.getSheetByName('Ark1');  const filter_sh = ss.getSheetByName('Filter');  const data = sh.getRange('A1:B'+sh.getLastRow()).getValues();  const sh_names = filter_sh.getRange('A1:A'+filter_sh.getLastRow()).getValues().flat();  sh_names.forEach(s=>{    if(!ss.getSheetByName(s)){    ss.insertSheet().setName(s);}    let sheet = ss.getSheetByName(s);       let f_data = data.filter(r=>r[0].includes(s));    if(f_data.length>0){    sheet.getRange(sheet.getLastRow()+1,1,f_data.length,f_data[0].length).setValues(f_data);}}); }

守着星空守着你

此函数会将所有结果放入相应单词旁边的第 4 列,而不是为每个单词创建一个页面。所以它运行得更快。function stringswords() {&nbsp; const ss=SpreadsheetApp.getActive();&nbsp; const sh=ss.getSheetByName('Sheet1');&nbsp; const sr=2;&nbsp; const rgd=sh.getRange(sr,1,sh.getLastRow()-sr+1,2);&nbsp; const data=rgd.getDisplayValues();&nbsp; const rgw=sh.getRange(sr,3,sh.getLastRow()-sr+1,1);&nbsp; const words=rgw.getDisplayValues().flat();&nbsp; const wiObj={};&nbsp; words.forEach(function(w,i){wiObj[w]=i});&nbsp; const rgr=sh.getRange(sr,4,sh.getLastRow()-sr+1,1);&nbsp; rgr.clearContent();&nbsp; var results=rgr.getValues();&nbsp; words.forEach(function(w,i,A){&nbsp; &nbsp; data.forEach(function(r,j,D) {&nbsp; &nbsp; &nbsp; if(data[j][0] && data[j][0].indexOf(w)!=-1) {&nbsp; &nbsp; &nbsp; &nbsp; results[wiObj[w]][0]+=Utilities.formatString('String:%s Vol:%s\n',data[j][0],data[j][1]);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; });&nbsp; rgr.setValues(results);}数据和输出图像:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript