0

そのため、名前と従業員のシフトのスプレッドシートを自動的に作成するものを作成することに取り組んでいます。以下は、これらの名前とシフトをコピーして新しいシートに貼り付けるために使用しているコードです。連結のようなプロセスを使用して、「6:00 AM - 1:00 PM」のような結果を生成しています。私の問題は、関数が最初のシートで52行を取得し、常に52行のデータがあるとは限らないため、関数の「 - 」だけを返して貼り付けることです。

私が探しているのは、特定の範囲内のセル全体で " - " を検索し、並べ替え関数に移動する前にそれをクリアする関数を用意することだけです。

function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Update", functionName: "Update"}  

                ];
ss.addMenu("Advanced", menuEntries);
}

function Update(){

var doc = SpreadsheetApp.openById('SOURCE ID GOES HERE');
var gs = doc.getSheets()[1];
var lastColumn = gs.getLastColumn();
var data = gs.getRange(2, 1, 52, lastColumn).getValues();

var destdoc = SpreadsheetApp.openById('DESTINATION ID GOES HERE');       
var destsheet = destdoc.getSheets()[0];


//Day1
//Names
var fullNames1 = [];
for (var i = 0; i < data.length; i++) {
fullNames1.push([data[i][9]]);
}
var destRangeName = destsheet.getRange("A3").offset(0, 0, fullNames1.length);
destRangeName.setValues(fullNames1);

//shift
var shift1 = [];
for (var i = 0; i < data.length; i++) {
shift1.push([data[i][10] + ' - ' + data[i][11]]);
}

var destRangeName = destsheet.getRange("B3").offset(0, 0, shift1.length);
destRangeName.setValues(shift1);

//sort
var range1 = destsheet.getRange("A3:B54");
range1.sort([{column: 2, ascending: true}]);
4

1 に答える 1

0

を介して入力された行のみを取得できるため、52 行の固定範囲を読み取る必要はありません.getDataRange()。これの代わりに:

var data = gs.getRange(2, 1, 52, lastColumn).getValues();

これを使って。

var data = gs.getDataRange().getValues()
             .slice(1);   // Skip 1 header row

名前とシフト列の作成を切り離しました。新しい「shiftData」を、名前と連結されたシフト データの両方を持つ 2 次元配列として作成してみてください。これにより、将来の保守が容易になります。

スプレッドシートに書き込んだ後に範囲で並べ替えを行っていますが、それらを書き出す前に JavaScript 配列で完全に行うことができます。sortこれを機能させるには、2 つの要素の比較結果をパラメーターとして提供する関数を提供する必要があります。

最終的なUpdate()機能は次のとおりです。

function Update(){

  var doc = SpreadsheetApp.openById('SOURCE ID GOES HERE');
  var gs = doc.getSheets()[1];
  var data = gs.getDataRange().getValues()
               .slice(1);   // Skip 1 header row

  var shiftData = [];
  for (var i = 0; i < data.length; i++) {
    shiftData.push([data[i][9], data[i][10] + ' - ' + data[i][11]]);
  }
  shiftData.sort(function(a,b) {
    // sort by shift
    return a[1] - b[1];
  });


  var destdoc = SpreadsheetApp.openById('DESTINATION ID GOES HERE');       
  var destsheet = destdoc.getSheets()[0];    
  var destRangeName = destsheet.getRange("A3")
                               .offset(0, 0, shiftData.length, shiftData[0].length);
  destRangeName.setValues(shiftData);
}
于 2013-05-23T17:34:45.637 に答える