gpt4 book ai didi

Javascript 术语 - 工作表是对象吗?

转载 作者:行者123 更新时间:2023-11-28 03:16:43 28 4
gpt4 key购买 nike

我使用 GAS 已经有一段时间了,但没有很强的 Javascript 背景,并且在忽略大小写的情况下按字母顺序对工作表进行排序时遇到了问题。我做了一些搜索,并根据 SO 中的其他公开答案和其他一些来源整理了这个方法。假设我的工作表被命名为“Sheet1”、“我的其他工作表”、“第三张工作表”、“另一张工作表”、“天哪又一张?”。我希望订购我的床单:“另一张纸”,“天哪,还有一张?”,“我的另一张纸”,“表1”,“第三张纸”

var spsheet = SpreadsheetApp.getActive()
var sheets = spsheet.getSheets()
var names =[]
sheets.forEach(function(item){
names.push(item.getName())
})
var sortednames = names.sort(function(a,b){
return ((a.toUpperCase() > b.toUpperCase()) ? 1:-1)

{)

我是不是理解错了?我认为 toUpperCase() 调用只会出于排序的目的临时更改每个名称的大小写,然后按字母顺序对工作表名称进行排序,然后返回忽略大小写的工作表的排序列表。然而,实际输出是:[天哪,另一张?,Sheet1,第三张纸,另一张纸,我的其他纸]

看来我首先按字母顺序对大写的工作表进行排序,然后按照小写的顺序进行排序。我走在正确的轨道上吗?或者我完全误解了什么?

最佳答案

试试这个:

function sortSheetsByNameCaseInsensitive() {
var ss=SpreadsheetApp.getActive();
var shts=ss.getSheets();
var nameA=shts.map(function(sh,i){return sh.getName()});
var nameB=shts.map(function(sh,i){return sh.getName().toLowerCase()});
var nameC=nameB.slice();
nameC.sort();
for(var i=0;i<nameC.length;i++) {
var sh=ss.getSheetByName(nameC[i]);
var idx=nameB.indexOf(nameC[i]);
sh.setName(nameA[idx]);
Sheets.Spreadsheets.batchUpdate({requests:[{"updateSheetProperties":{"properties":{"sheetId":sh.getSheetId(),"index":i+1},"fields":"index"}}]}, ss.getId());
}
}

关于Javascript 术语 - 工作表是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573547/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com