Google电子表格/脚本问题:
免责声明:我是初学者。任何解释都对我有很大帮助。
长话短说:
- 工作表1,N列包含以逗号分隔的值。
- 工作表2,A列具有所有可能的值,可以组合起来构成工作表1,N列的内容。
- 工作表2,C列包含“替代”值。
醇>我需要一个脚本,它可以用工作表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]);
}}
答案 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)
}