在表格APP SCRIPT中设置一个大写的范围



我想创建一个脚本,我将在一个菜单中获得范围"A1:C"把它大写。问题是会抛出一个错误"TypeError: values。toUpperCase不是一个函数">试图使用toUpperCase().

得到以下代码:

function allUpper() {
var values = SpreadsheetApp.getActiveSheet().getRange("A1:C").getValues();
var valuesUpper = values.toUpperCase();
ss.getRange("A1:C").setValue(valuesUpper);
}

我对JS和sheets api很陌生。我觉得很傻,因为它看起来很简单。

编辑1:现在我知道。touppercase()对数组不起作用。但是所提出的映射数组和遍历数组内元素的解决方案仍然会抛出与toUpperCase();

相同的错误。编辑2:我上传了@NEWAZA要求的我的数据样本示例

Try:

function allUpper() {
const range = SpreadsheetApp.getActiveSheet()
.getRange("A1:C")
const values = range.getDisplayValues()
.map(row => row.map(col => (col) ? col.toUpperCase() : col))
range.setValues(values);
}

一旦我们得到values中的值,我们使用.map()循环遍历每一行,并且在每一行中,我们循环遍历每个单元格/列并设置为大写。

另一种常见的方法是使用for循环,并将一个循环嵌套在另一个循环内。

阅读更多:

  • Array.map ()

在修改值范围时需要注意的一件重要的事情是,你需要确保你设置的范围与这些值的'大小'相同。

最初你从A1:C中获取值并试图将它们设置为A1,由于'size'的差异,这将不起作用。

编辑:在列/单元格映射中寻址空白单元格。

(col) ? col.toUpperCase() : col

如果item有值,将其修改为.toUpperCase()或保留。

Range.getValues返回二维数组。您必须为每一行和每一列执行toUpperCase()

function allUpper() {
var values = SpreadsheetApp.getActiveSheet().getRange( "A1:C" ).getValues();
for ( var row = 0; row < values.length; row++ ) {
for ( var col = 0; col < values[ row ].length; col++ ) {
values[ row ][ col ] = values[ row ][ col ].toUpperCase();
}
}
ss.getRange( "A1:C" ).setValues( values );
}

当您可以执行以下操作时,就不需要低效的嵌套for循环:

values.map( function( row ) {
return row.map( function( cell ) { 
cell = cell.toUpperCase(); 
} );
} 

最新更新