Google脚本 - 如何通过在工作表2中搜索这些值并从另一个工作表2列返回关联数据来替换工作表1中的单元格值

时间:2013-03-14 02:22:02

标签: arrays google-apps-script google-spreadsheet-api

Google电子表格/脚本问题:

免责声明:我是初学者。任何解释都对我有很大帮助。

  

长话短说:

     
      
  1. 工作表1,N列包含以逗号分隔的值。
  2.   
  3. 工作表2,A列具有所有可能的值,可以组合起来构成工作表1,N列的内容。
  4.   
  5. 工作表2,C列包含“替代”值。
  6.         

    我需要一个脚本,它可以用工作表2,C列中的“替代”值替换工作表1,N列中的所有值。我需要将最终结果作为单个逗号分隔中的“替代”值值。

         

    我已经编写脚本,将列N值分成新列中的单个值。但是,我未能取得进一步进展。我当前的分割脚本显示在底部。

完整的解释:

“工作表1”包含多个列,包括包含以逗号分隔的值的列“N”。当用户输入数据时,工作表1中的行数将增加。目前,只有三行数据。列“N”包含:


N1的价值为“狗,猫,兔”
N2的值为“Dog,Fish”
N3的值为“青蛙,马,鱼”

我当前的Google Script收集了所有可用行中的数据,然后将列“N”中逗号分隔的值分隔为新列,如下所示:


X1的值为“Dog”,Y1的值为“Cat”,Z1的值为“Rabbit”
X2的值为“Dog”,Y2的值为“Fish”
X3的值为“Frog”,Y3的值为“Horse”,Z3的值为“Fish”

“工作表2”在A栏中包含可能出现在上面的所有可能值 - 狗,猫,兔子,鱼,马等。所以,


A1的值为“Dog”
A2的值为“Cat”
A3的值为“兔子”
A4的值为“Fish” - 等(总共有100多个值)。

“工作表2”在C栏中包含“替代值”(即相应的Google日历资源地址):


C1的值为“domain.com_928313sdf98@resource.calendar.google.com”
C2的值为“domain.com_190382d0931@resource.calendar.google.com”
C3的值为“domain.com_295801a0181@resource.calendar.google.com”
C4的值为“domain.com_5s3910s1481@resource.calendar.google.com”---等。

我正在寻找一个脚本,对于工作表1中的数据,它将搜索工作表2中的分隔值,然后将工作表1中的这些值替换为相关的“替代值”(即Google日历资源地址)工作表2,C列。然后我需要它将结果连接回逗号分隔值。

  

所以,我想从工作表1开始,其中N1的值为“狗,猫,兔子”,我想回到“domain.com_928313sdf98@resource.calendar.google.com,domain.com_190382d0931 @ resource.calendar.google.com,domain.com_295801a0181 @resource.calendar.google.com“作为我的最终结果。

该脚本将在所有行中执行此操作。

我的分裂脚本(我甚至不确定这是否是处理此问题的最佳方式):

function mySplit() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var startcolumn = 2;
  var startrow = 2;
  var numcolumns = 500;
  var dataRange = sh.getRange(startcolumn, 1, numcolumns, 25);
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
  var cell = sh.getRange(startcolumn + i, 15).getValues()[0];
  var sCell = cell[0].split(",");
  sh.getRange(startrow +i,26,1,sCell.length).setValues([sCell]);  
  }}

1 个答案:

答案 0 :(得分:2)

正如我在你的另一篇文章中已经提到的,这对于数组来说非常简单,这是一个包含新数据的工作示例:请参阅sheet here(只读,制作副本以进行测试)

function replaceTagsWithRessource(){ // in this example sheet, the function will replace aa with 11, bb with 22 etc...

var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sh2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var sourceCol = sh1.getRange('N2:N').getValues();
Logger.log(sourceCol)
var targetRef = sh2.getDataRange().getValues();
Logger.log(targetRef)
var newColN = []
for(var s in sourceCol){
var caltoUse = sourceCol[s][0].split(',');
   var calID = []  
  for(var n in caltoUse){
    for(var r in targetRef){
     if(caltoUse[n]==targetRef[r][0]){ calID.push(targetRef[r][2])} // get the cal ref in col 3
     }
     }
    newColN.push([calID.toString()]);
    Logger.log(newColN)
}
sh1.getRange('N2:N').setValues(newColN);// replace original values with new values (comma separated calendar IDs)
}