gpt4 book ai didi

google-apps-script - 在 Google 表格中将不相邻的列转换为正确的/标题大小写

转载 作者:行者123 更新时间:2023-12-02 20:20:18 24 4
gpt4 key购买 nike

我在网上找到了一些东西,它可以将文本更改为标题大小写;但是,它仅适用于相邻列,我需要将其应用于多个不相邻列。我将粘贴到脚本中。如果您可以修复以便能够让脚本在我指定的多个不相邻列上运行,那就太好了。我在网上找到了一些东西,说它可以做到这一点,但我不清楚。这是有效的脚本:

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("A_range");
range.activate();
var values = range.getValues();
if (values.map) {
range.setValues(values.map(function(row) {
return row.map(titleCase);
}));
}
else {
range.setValue(titleCase(values));
}
}

function titleCase(str) {
return str.toString().split(/\b/).map(function(word) {
return word ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() : '';
}).join('');
}

这是其他人关于这个概念的:让它在其他列上运行的东西是这样的:

var range1=sheet.getRange("A1:A19").getValues();
var range2=sheet.getRange("C1:C19").getValues();
var range=[],i=-1;
while ( range1[++i] ) {
range.push( [ range1[i][0], range2[i][0] ] );
}

其中范围将包含两列的内容。

data = sheet.getRange("A1:C19").getValues();
for (i = 0; i < data[0].length; i++) {
// do something with data[0][i]
// do something with data[2][i]
}

我不确定如何实现上面列出的另外两个想法。例如,如果您可以非常具体,例如将一些内容实际放入第一个脚本中,使其在 Col. A 和 Col. D 上运行,那么它会比泛泛而谈要好得多,因为我对此真的很陌生并且已经花了很多时间花费大量时间尝试学习/掌握它。谢谢!

最佳答案

因为对 SpreadsheetApp API 进行尽可能少的调用可以提高速度,所以我更愿意简单地获取第一列和最后一列之间所有单元格的范围,将转换应用于选定的列,然后编写全部又回来了。如果列发生更改,唯一需要编辑的位置是单个模式数组。

var columnPattern = [1,5,6,7] // Equivalent to [A,E,F,G]

然后,脚本在表示工作表的二维数组上运行一个简单的映射。

function transform() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

// Rows (Could be first row and last row, OP isn't clear.
var startRow = 1, endRow = sheet.getLastRow();

// An array with Column indexes for those you want in Title Case.
var columnPattern = [1,5,6,7];
var firstColumn = parseInt(columnPattern.slice(0,1));
var lastColumn = parseInt(columnPattern.slice(-1));

// The whole range
var range = sheet.getRange(startRow,
firstColumn,
endRow,
lastColumn - firstColumn)

// Apply Title Case to selected columns.
var data = range.getValues().map(function(row, i, rows) {
row = row.map(function(col, j, row) {
if(columnPattern.indexOf(j + firstColumn) >= 0) {
col = titleCase(col);
}
return col;
});
return row;
});
range.setValues(data);
}

我可能要澄清的唯一一点是它标识要修改的列的行。

if(columnPattern.indexOf(j + firstColumn) >= 0) {

这只是纠正了 columnPattern 数组与工作表维度不同的情况。另一种方法是使用一个将 x 维度与 bool 值相匹配的数组,但这不太适合您的工作表更改大小。

我拒绝将其放入 onEdit() 函数中,但这取决于您的用例数据更改的频率。

关于google-apps-script - 在 Google 表格中将不相邻的列转换为正确的/标题大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45049216/

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