2016-12-02 47 views
-1

我在電子表格上有一個腳本大寫第一列。 這是一個偉大的工具。但現在,我想適用於表格的所有數據,而不僅僅是第一列。有人能告訴我該怎麼做嗎? 問候使用腳本代替正確的Google腳本

function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Custom Menu') 
     .addItem('Capitalize', 'proper') 
     .addToUi(); 
} 


function proper() { 
    var arr = [], 
     s = SpreadsheetApp.getActiveSheet(); 
    s.getRange('A2:A') 
     .getValues() 
     .forEach(function(r) { 
      if (r[0]) arr.push([toTitleCase(r[0])]) 
     }); 
    s.getRange(1, 1, arr.length, arr[0].length) 
     .setValues(arr); 
} 

function toTitleCase(str) { 
    return str.replace(/\w\S*/g, function(txt) { 
     return txt.charAt(0) 
      .toUpperCase() + txt.substr(1) 
      .toLowerCase(); 
    }); 
} 
+0

如果你不能*運行*的代碼段,它不應該是一個片段,只是一個代碼塊。 (並且不要在JavaScript代碼編輯器的HTML面板中發佈JavaScript代碼。) –

+0

只是在這裏猜測,但肯定會將's.getRange('A2:A')'改爲獲取所有單元格的東西?你究竟在哪裏卡住? –

+0

對不起,T.J.我根本不是編碼員。我只是在學習。我想選擇所有包含數據的單元格。或者,選擇列A到T.問候 –

回答

1

您可以適當的功能更改爲

function proper() { 
var s = SpreadsheetApp.getActiveSheet() 
s.getDataRange() 
    .setValues(
     s.getDataRange() 
     .getValues() 
     .map(function (r) { 
      return r.map(function (el) { 
       return !el ? null : typeof el !== 'string' && el ? el : toTitleCase(el); 
      }) 
     }) 
    ) 
} 

,看看是否可行?

請注意,如果工作表中有數字值,則此代碼不會引發錯誤。