将给定范围的首字母大写

Capitalize the first letter of a given range

我想在整个列数据 (v7:v) 的第一个单词上放一个大写字母。

我找到了一个脚本,但它不起作用:

function proper() {
  var arr = [],
    s = SpreadsheetApp.getActiveSheet();
    s.getRange('b2:b').getValues().forEach(function (r) {
      if (r[0]) arr.push([toTitleCase(r[0])])
    });
  s.getRange(2, 2, 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();
  });
}

此外,我希望此脚本仅适用于给定的 sheet。

我测试了:

var ss=SpreadsheetApp.getActiveSpreadsheet(); 
var s=ss.getSheetByName("sheet1");

它对我有用,但我猜您实际上希望脚本实际更改同一列。该脚本只是通过将大写的单词复制到另一列来向您展示如何做到这一点。

这可能不是您想要的,所以我采用了该代码并将其设置为将 A 列中的所有单词大写。不要忘记将 sheet 的名称更改为您想要的名称。

function proper() {
    var arr = [];
    var ss = SpreadsheetApp.getActive();
    var s=ss.getSheetByName('Sheet 1');
    s.getRange('a: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();
  });
}