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”创建为具有名称和连接移位数据的二维数组。这在将来更容易维护。

在写入电子表格后,您正在对范围进行排序,但您可以在将它们写出之前完全在 javascript 数组中执行此操作。为此,您需要提供一个函数,该函数将给出sort两个元素的比较结果,作为参数。

最后的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 回答