Подсчет жирных ячеек с возможностью копирования / перетаскивания в Google Sheets Scripts - PullRequest
0 голосов
/ 26 мая 2019

У меня есть много строк, которые я хочу посчитать, сколько ячеек выделено жирным шрифтом в Google Sheets.Я просмотрел плагины и искал готовые фрагменты кода (у меня нет навыков программирования).

Я нашел скрипт, который делает именно то, что я хочу, но ячейки, которые он проверяет, и где он выводит ответ, жестко запрограммированы здесь (ответ от пользователя random-parts): CountЖирные ячейки в скрипте Google Sheets

У меня есть несколько сотен строк, которые я хочу знать, сколько ячеек выделено жирным шрифтом, поэтому мне пришлось бы создать сотни отдельных сценариев, чтобы использовать это.Я пытался превратить его в команду, которую я могу перетаскивать / копировать на листе, но этот навык намного превосходит меня.

Это код, который подсчитывает все ячейки жирным шрифтом, но ввод и вывод диапазонажестко закодировано в

  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getActiveSheet();
  var range_input = sheet.getRange("E2:S7");
  var range_output = sheet.getRange("G14");

  // Get the fontWeights of the range and flatten the array
  var cell_styles = range_input.getFontWeights().join().split(",");

  // Filter out any value that is not "bold"
  var filter_bold = cell_styles.filter(function (e) { return e == "bold" });

  // Set the count
  range_output.setValue(filter_bold.length);

}

Может кто-нибудь предоставить сценарий и формулу, которые позволили бы мне определить диапазон на листе, а затем перетащить его и обновить?

1 Ответ

0 голосов
/ 26 мая 2019

Вот ссылка на рабочий пример , а ниже приведен код.Важно отметить, что вам нужно обновить окно браузера для перерасчета формул.Результат формулы не может быть обновлен простым изменением стиля ячеек.

function onOpen(){
  refresh()
}

function refresh(){
  var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet2")
  var formulaCol = sheet.getRange("E:E").getColumn()
  var formulaRange = sheet.getRange(2, formulaCol, sheet.getDataRange().getLastRow()-1, 1) 
  var rowCount = formulaRange.getLastRow()-formulaRange.getRow()+1
  var dummyFormulas = []
  var formulas = formulaRange.getFormulas()
  for(var i=0; i<rowCount; i++){
    dummyFormulas.push(['=""'])
  }
  Logger.log(dummyFormulas)
  Logger.log(formulas)
  formulaRange.setFormulas(dummyFormulas)
  SpreadsheetApp.flush()
  formulaRange.setFormulas(formulas)
}

function countBoldCells(startRow, startColumn, endRow, endColumn, random){
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getActiveSheet();
  var range_input = SpreadsheetApp.getActiveSheet().getRange(startRow, startColumn, endRow-startRow+1, endColumn-startColumn+1)

  // Get the fontWeights of the range and flatten the array
  var cell_styles = range_input.getFontWeights().join().split(",");

  // Filter out any value that is not "bold"
  var filter_bold = cell_styles.filter(function (e) { return e == "bold" });

  return filter_bold.length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...