我一直在努力自动排序我的数据(基于第2行第1列数据提升),我通过在线搜索找到了一些提示,但遇到了一个错误,似乎我无法通过网络找到答案。
所以情节如下:
我有2张,Sheet1& Sheet2,来自sheet1的数据通过sheet2链接,尽管sheet2有其他列,
这是sheet1
这是sheet2
请注意两个工作表中的列姓氏和代码是相同的,不同之处是列Gender(在下拉列表中设置格式)& Bdate(格式化为日期的单元格)
我发现一个似乎有效的脚本,但是我没有完全正常工作,这是运行脚本后的输出。
注意红色框内的列,似乎性别和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"姓氏"。
自动对此进行排序如何使这个脚本在格式化的单元格上工作?
先谢谢,我会继续搜索网络。
答案 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);
}
}