Google App脚本自动编辑

时间:2017-01-20 06:00:17

标签: google-apps-script google-sheets

我一直在努力自动排序我的数据(基于第2行第1列数据提升),我通过在线搜索找到了一些提示,但遇到了一个错误,似乎我无法通过网络找到答案。

所以情节如下:

我有2张,Sheet1& Sheet2,来自sheet1的数据通过sheet2链接,尽管sheet2有其他列,

这是sheet1

Sheet1

这是sheet2

Sheet2

请注意两个工作表中的列姓氏和代码是相同的,不同之处是列Gender(在下拉列表中设置格式)& Bdate(格式化为日期的单元格)

我发现一个似乎有效的脚本,但是我没有完全正常工作,这是运行脚本后的输出。

enter image description here

注意红色框内的列,似乎性别和bdate没有遵循自动排序。

这是我的代码:

function autosortOnEdit() {
var sheetNames = ["Sheet1", "Sheet2"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
sheetNames.forEach(function(name) {
var sheet = ss.getSheetByName(name);
var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn() -1);
range.sort({column: 1, ascending: true});
});
}

我的观察结果是,我认为此脚本不适用于格式如上例所示的单元格。

我想根据A"姓氏"。

自动对此进行排序

如何使这个脚本在格式化的单元格上工作?

先谢谢,我会继续搜索网络。

1 个答案:

答案 0 :(得分:1)

不确定如何使用range.sort({column: 1, ascending: true});或它是如何工作的,但每当我想对工作表值进行排序时,我会执行以下操作:

function myFunction() 
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var rows = sheet.getLastRow();
  var columns = sheet.getLastColumn();

  var sortedValues = sheet.getRange(2, 1, rows-1, columns).getValues().sort();

  sheet.getRange(2, 1, rows-1, columns).setValues(sortedValues);
}

尝试使用此代码而不是代码,希望这有助于我在测试时成功排序所有值。

修改

要将相同的内容应用于电子表格中的所有工作表,您可以获取工作表名称并逐个迭代它。检查代码:

function myFunction() 
{
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var currentSheetName, currentSheet;

  for(var i=0; i<sheets.length; i++)
  {
    currentSheetName = sheets[i].getName();

    currentSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(currentSheetName);
    var rows = currentSheet.getLastRow();
    var columns = currentSheet.getLastColumn();

    var sortedValues = currentSheet.getRange(2, 1, rows-1, columns).getValues().sort();

    currentSheet.getRange(2, 1, rows-1, columns).setValues(sortedValues);
  }    
}