使用app脚本查找并清除一串文本

时间:2013-05-23 16:16:35

标签: google-apps-script

因此,我正致力于创建能够自动创建名称和员工轮班的电子表格的内容。下面是我用来复制和粘贴这些名称并转移到新工作表的代码。我正在使用类似连接的过程来产生这样的结果:“上午6:00 - 下午1:00”。我现在的问题是该函数在第一张表上获得了52行,并且我并不总是有52行数据,因此它返回并仅粘贴函数的“ - ”。

我要做的就是有一个函数在给定范围内的整个单元格中找到“ - ”并在我进入sort函数之前清除它。

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}]);

1 个答案:

答案 0 :(得分: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);
}