簡體   English   中英

Google表格腳本可根據單元格值設置自定義數字格式

[英]Google Sheet script to set custom number formatting based on cell value

我想根據同一行中另一個單元格的值將單元格格式化為自定義數字格式。 例如,在范圍A1:U1000我想基於單元格G1的文本值將單元格J1K1格式化為相同的自定義數字格式。 我需要將其向下傳播幾千行。 我編輯了一個腳本 ,發現該腳本允許我設置當前選擇的單元格的自定義數字格式,但是我希望在編輯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); } } 

我能夠在原始代碼的基礎上實現所需的結果。 它確實對我有用,但是似乎效率不高。 我正在格式化的單元格需要一段時間才能更新。

 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); } } 

我為類似的帖子創建了觸發器,可以在此處重復使用。 嘗試這個...

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);
}

這是一個示例表的鏈接,希望該可以按您期望的那樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM