我想創建一個腳本,我將在選單中獲取范圍“A1:C”并將其大寫。問題是嘗試使用toUpperCase().
得到以下代碼:
function allUpper() {
var values = SpreadsheetApp.getActiveSheet().getRange("A1:C").getValues();
var valuesUpper = values.toUpperCase();
ss.getRange("A1:C").setValue(valuesUpper);
}
我對 JS 和 sheet api 很陌生。我覺得很愚蠢,因為它看起來很簡單。
編輯 1:現在我知道 .toUpperCase() 不適用于陣列。但是映射陣列和回圈遍歷內部元素的建議解決方案仍然拋出相同的錯誤toUpperCase();
編輯 2:我上傳了@NEWAZA Sample要求的資料樣本
uj5u.com熱心網友回復:
嘗試:
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回圈并將一個嵌套在另一個內部。
閱讀更多:
- 陣列.map()
修改值范圍時需要注意的重要一點是,您需要確保設定的范圍與這些值的“大小”相同。
最初,您從 中獲取值A1:C并嘗試將它們設定為A1,由于“大小”不同,這將不起作用。
編輯: 解決列/單元格映射中的空白單元格。
(col) ? col.toUpperCase() : col
如果 item 有值,則將其修改為.toUpperCase(),或保留。
uj5u.com熱心網友回復:
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 );
}
uj5u.com熱心網友回復:
當您可以執行以下操作時,不需要低效的嵌套 for 回圈:
values.map( function( row ) {
return row.map( function( cell ) {
cell = cell.toUpperCase();
} );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473309.html
