循环选定的单元格以缩进文本

时间:2014-02-25 01:33:31

标签: google-apps-script google-sheets setvalue

我编写了以下Google Spreadsheet脚本,尝试遍历所有选定的单元格,然后通过在值周围添加=CONCAT(REPT( CHAR( 160 ), 5),"' + value[row] + '")来更新值以便添加缩进。

但是我在处理循环时遇到错误,我不确定如何修改代码以纠正/解决。我得到的错误是:TypeError: Cannot call method "setValue" of undefined.

有谁知道我应该改变什么?

var ss = SpreadsheetApp.getActiveSpreadsheet();

function indentText() {
  var cells = ss.getActiveRange();
  var values = cells.getValues();
  row = [];
  len = [];
  Logger.log(values);

  for (row = 0, len = values.length; row < len; row++) {
    if (values[row] != '') {
      cells[row].setValue('=CONCAT(REPT( CHAR( 160 ), 5),"' + value[row] + '")');
    }
  }

};

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Indent Text",
    functionName : "indentText"
  }];
  sheet.addMenu("Indent Text", entries);
};

编辑:在查看我的代码后,我现在有了一个可行的解决方案。为了完整起见,我在这里添加了它:

var ss = SpreadsheetApp.getActiveSpreadsheet();

function indentText() {
  var values = ss.getActiveRange().getValues();
  var newValues = new Array();

  for (i = 0; i < values.length; i++) {
    if (values[i][0] != '') {
      newValues.push(['=CONCAT(REPT( CHAR( 160 ), 5),"' + values[i][0] + '")']);
    } else {
      newValues.push(['']);  
    }
  }

  ss.getActiveRange().setValues(newValues);

};

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Indent Text",
    functionName : "indentText"
  }];
  sheet.addMenu("Indent Text", entries);
};

如果有更好的方法可以实现这一点,那么当然会感兴趣。

0 个答案:

没有答案