1

谷歌电子表格/脚本问题:

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

长话短说:

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

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

我已经编写了将 N 列值分隔为新列中的单个值的脚本。但是,我一直无法进一步前进。我当前的拆分脚本出现在底部。

完整解释:

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


N1 的值为“Dog, Cat, Rabbit”
N2 的值为“Dog, Fish”
N3 的值为“Frog, Horse, Fish”

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


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

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


A1 的值为“Dog”
A2 的值为“Cat”
A3 的值为“Rabbit”
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 中的这些值替换为来自工作表 2 的相关“替代值”(即 Google 日历资源地址), C 列。然后我需要将结果连接回逗号分隔值。

所以,我想从工作表 1 开始,其中 N1 的值为“Dog, Cat, Rabbit”,我想返回“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]);  
  }}
4

1 回答 1

2

正如我在您的另一篇文章中已经提到的,这对数组来说非常简单,这是一个使用新数据的工作示例:请参见此处的工作表(只读,复制以进行测试)

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)
}
于 2013-03-14T07:53:25.367 回答