我在网上找到了一些东西,它适用于将文字改为标题案例;但是,它只适用于相邻列,我需要将其应用于多个不相邻的列。我将粘贴在脚本中。如果你可以修复一下,让我们能够让脚本在我指定的多个不相邻的列上运行,那就太好了。我在网上发现了一些可以做到这一点的东西,但我不清楚。 这是有效的脚本:
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]
}
我不确定如何实施上面列出的其他2个其他想法。如果你可能真的具体,比如实际上把东西放到允许它在Col.A和Col.D上运行的第一个脚本中,那么它会比一般性好得多,因为我真的很陌生并花了很多钱大量的时间试图学习/掌握它。谢谢!
答案 0 :(得分:1)
因为尽可能少地对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维度匹配的数组与布尔值相匹配,但这对于更改工作表的大小不太适应。
我不赞成将它放在onEdit()函数中,但这取决于你的用例数据更改的频率。