在工作表 APP 脚本中将范围设置为大写
Set a range to uppercase in sheets APP SCRIPT
我想创建一个脚本,我将在菜单中获取范围“A1:C”并将其大写。问题是抛出错误 "TypeError: values.toUpperCase is not a function" trying to use toUpperCase()
.
得到以下代码:
function allUpper() {
var values = SpreadsheetApp.getActiveSheet().getRange("A1:C").getValues();
var valuesUpper = values.toUpperCase();
ss.getRange("A1:C").setValue(valuesUpper);
}
我对 JS 和工作表还很陌生 api。我觉得很傻,因为它看起来很简单。
编辑 1: 现在我知道 .toUpperCase() 不适用于数组。但是建议的映射数组和循环遍历内部元素的解决方案仍然会抛出与 toUpperCase();
相同的错误
编辑 2: 我上传了@NEWAZA 要求的我的数据样本
Sample
Range.getValues
returns 二维数组。您必须对每一行和每一列执行 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 );
}
尝试:
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()
遍历每一行,在每一行中,我们遍历每个 cell/column 并设置为大写。
另一种常见的方法是使用 for
循环并将一个循环嵌套在另一个循环中。
阅读更多:
修改值范围时需要注意的一件重要事情是,您需要确保您设置的范围与这些值相同'size'。
最初您从 A1:C
获取值并试图将它们设置为 A1
,由于 'size'.
的差异,这将无法工作
编辑:
解决了 column/cell 映射中的空白单元格。
(col) ? col.toUpperCase() : col
如果物品有价值,请将其修改为.toUpperCase()
,否则保留。
当您可以执行以下操作时,就不需要低效的嵌套 for 循环了:
values.map( function( row ) {
return row.map( function( cell ) {
cell = cell.toUpperCase();
} );
}
我想创建一个脚本,我将在菜单中获取范围“A1:C”并将其大写。问题是抛出错误 "TypeError: values.toUpperCase is not a function" trying to use toUpperCase()
.
得到以下代码:
function allUpper() {
var values = SpreadsheetApp.getActiveSheet().getRange("A1:C").getValues();
var valuesUpper = values.toUpperCase();
ss.getRange("A1:C").setValue(valuesUpper);
}
我对 JS 和工作表还很陌生 api。我觉得很傻,因为它看起来很简单。
编辑 1: 现在我知道 .toUpperCase() 不适用于数组。但是建议的映射数组和循环遍历内部元素的解决方案仍然会抛出与 toUpperCase();
编辑 2: 我上传了@NEWAZA 要求的我的数据样本 Sample
Range.getValues
returns 二维数组。您必须对每一行和每一列执行 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 );
}
尝试:
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()
遍历每一行,在每一行中,我们遍历每个 cell/column 并设置为大写。
另一种常见的方法是使用 for
循环并将一个循环嵌套在另一个循环中。
阅读更多:
修改值范围时需要注意的一件重要事情是,您需要确保您设置的范围与这些值相同'size'。
最初您从 A1:C
获取值并试图将它们设置为 A1
,由于 'size'.
编辑: 解决了 column/cell 映射中的空白单元格。
(col) ? col.toUpperCase() : col
如果物品有价值,请将其修改为.toUpperCase()
,否则保留。
当您可以执行以下操作时,就不需要低效的嵌套 for 循环了:
values.map( function( row ) {
return row.map( function( cell ) {
cell = cell.toUpperCase();
} );
}