是否有脚本来查找包含星号的特定列中的每个单元格,然后在其上方插入一行?

时间:2019-02-17 02:19:53

标签: google-apps-script google-sheets

我有一个问答电子表格,所有内容都在A列中,其中包括Markdown格式的标题。是否有一个脚本可以识别每个带有星号的单元格,然后在其上方插入一行?

我尝试创建一个范围,然后使用insertRowsBefore,但出现错误(我想是因为insertRowsBefore需要一个整数)。

1 个答案:

答案 0 :(得分:-1)

您需要什么。仅当该行中的单元格“ A”包含星号且之前的行不为空时,此代码才在该行之前插入一行。

function userActionInsertRowsBefore() {
  /** @type {conditionCallback} */
  var cb = function(row, i, values) {
    return values[i - 1] && /\*/.test(row[0]) && values[i - 1].join('') !== '';
  };

  var sheet = SpreadsheetApp.getActiveSheet();
  insertRowBeforeByCondition_(sheet, cb);
}

/**
 * Insert row before by a condition
 * @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
 * @param {conditionCallback} Decides insert or skip the row
 * @returns {GoogleApps Script.Spreadsheet.Sheet}
 */

function insertRowBeforeByCondition_(sheet, condition) {
  // var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  for (var i = values.length - 1; i >= 0; i--) {
    if (condition(values[i], i, values)) sheet.insertRowBefore(i + 1);
  }
  return sheet;
}

/**
 * This callback is displayed as a global member.
 * @callback conditionCallback
 * @param {object[]} row Row data
 * @param {number} index Index of the row
 * @param {object[][]} values Sheet values
 * @returns {boolean}
 */