Скрипт Google Sheet для установки произвольного форматирования чисел на основе значения ячейки - PullRequest
0 голосов
/ 08 января 2019

Я хочу отформатировать ячейку в произвольном числовом формате на основе значения другой ячейки в той же строке. Например, в диапазоне A1:U1000 я хочу отформатировать ячейки J1 и K1 в один и тот же пользовательский числовой формат на основе текстового значения ячейки G1. Мне нужно распространить это на пару тысяч строк. Я отредактировал скрипт , который, как я обнаружил, позволяет задавать пользовательский формат числа ячейки, которую я выбрал в настоящий момент, однако я хочу, чтобы он запускался при редактировании значений в столбце G. У меня проблемы с объединением в onEdit() функцию.

function testV(){
  setNumberFormat('Volume');
}

function testM(){
  setNumberFormat('Mass');
}

function setNumberFormat(format) {
  var range = SpreadsheetApp.getActiveRange();
  var numberFormat = '';
  try {
    switch (format){
      case 'Volume':
        numberFormat = '##0.00,# in³';
        break;
      case 'Mass':
        numberFormat = '##0.00,# g';
        break;
    }
    range.setNumberFormat(numberFormat);
  } catch (e){
    throw new Error('There was an error: ' + e);
  }
}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я создал триггер для аналогичной записи , которую можно использовать здесь. Попробуйте это ...

function onEdit(e) {
  // set the range to monitor for edits 
  var editRange = {
    top : 5, bottom : 20,                                                     // row numbers in search range
    left : 7, right : 7                                                       // column numbers in search range
  };
  var thisRow = e.range.getRow();                                             // find the row number that was changed
    if(thisRow < editRange.top || thisRow > editRange.bottom) return;         // exit if not in these rows
  var thisColumn = e.range.getColumn();                                       // find the column number that was edited
    if(thisColumn < editRange.left || thisColumn > editRange.right) return;   // exit if not in these columns

  var shtIn = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("stock");  // set the sheet for the cell that will be formatted 
  var numberFormat = '';
  switch(e.value) {
    case 'Mass':
      numberFormat = '##0.00,# g';
      break;
    case 'Volume':
      numberFormat = '##0.00,# in³'
      break;
  }
  shtIn.getRange(thisRow, 10).setNumberFormat(numberFormat);
  shtIn.getRange(thisRow, 11).setNumberFormat(numberFormat);
}

Вот ссылка на образец листа , где, как мы надеемся, он работает так, как вы ожидаете.

0 голосов
/ 08 января 2019

Мне удалось построить оригинальный код для достижения желаемого результата. Это работает для меня, однако это не кажется очень эффективным. Ячейки, которые я форматирую, требуют времени для обновления.

var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var someCell = activeSheet.getActiveRange().getValue();
var someRow = activeSheet.getActiveRange().getRowIndex();
var someColumn = activeSheet.getActiveRange().getColumn();

function onEdit() {
  
  if (someCell == 'Machine 1' && someColumn == '7'){
    setNumberFormat('Mass');
  }
  else if (someCell == 'Machine 2' && someColumn == '7') {
    setNumberFormat('Mass');
  }
  else if (someCell == 'Machine 3' && someColumn == '7') {
    setNumberFormat('Mass');
  }
  else if (someCell == 'Machine 4' && someColumn == '7') {
    setNumberFormat('Volume');
  }
  else if (someCell == 'Machine 5' && someColumn == '7') {
    setNumberFormat('Sheet');
  }
  else if (someCell == 'CAD' && someColumn == '7') {
    setNumberFormat('N/A');
  }
  else if (someCell == '' && someColumn == '7'){
    setNumberFormat('Blank')
  }
}

function setNumberFormat(format) {
  var rangeMaterial = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(someRow,10);
  var rangeSupport = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(someRow,11);
  var numberFormat = '';
  try {
    switch (format){
      case 'Volume':
        numberFormat = '##0.00,# in³';
        break;
      case 'Mass':
        numberFormat = '##0.00,# g';
        break;
      case 'Sheet':
        numberFormat = '##,# "sheets"';
        break;
      case 'N/A':
        numberFormat = '##,# "N/A"';
        break;
      case 'Blank':
        numberFormat = '##,#';
        break;
    }
    rangeMaterial.setNumberFormat(numberFormat);
    rangeSupport.setNumberFormat(numberFormat);
    
  } catch (e){
    throw new Error('There was an error: ' + e);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...