1

Googleスプレッドシート/スクリプトに関する質問:

免責事項:私は初心者です。どんな説明も私を大いに助けてくれます。

短編小説:

  1. ワークシート1、列Nには、コンマ区切りの値が含まれています。
  2. ワークシート2、列Aには、ワークシート1、列Nのコンテンツを構成するために組み合わせることができるすべての可能な値があります。
  3. ワークシート2、列Cには「代替」値が含まれています。

ワークシート1、列Nのすべての値をワークシート2、列Cの「代替」値に置き換えることができるスクリプトが必要です。最終結果は、単一のコンマ区切り値の「代替」値である必要があります。

列Nの値を新しい列の個々の値に分割するスクリプトをすでに作成しました。しかし、それ以上進むことはできませんでした。現在の分割スクリプトが下部に表示されます。

完全な説明:

「ワークシート1」には、カンマ区切りの値を含む列「N」を含む複数の列が含まれています。シート1の行数は、ユーザーがデータを入力するにつれて増加します。現在、データは3行しかありません。列「N」には次のものが含まれます。


N1の値は「Dog、Cat、Rabbit」
です。N2の値は「Dog、Fish」
です。N3の値は「Frog、Horse、Fish」です。

現在のGoogleScriptは、使用可能なすべての行からデータを収集し、次のように、列「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」です。

「ワークシート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 に答える