5

Googleスプレッドシートには、条件付き書式を宣言的に定義するインタラクティブな方法があります。 App Scriptを使用して同じ宣言モデルをプログラムする方法はありますか?条件付き書式設定ルールを追加する

私は多くのスプレッドシートを生成するスクリプトを持っています。私はSheetDataValidationのクラスを使ってデータとデータの検証ルールを設定しました。しかし、条件付き書式設定でも同じことをすることはできません。私はConditionalFormattingRuleオブジェクトかそのようなものを見つけることを期待しました。

注:onEdit triggerを聞くカスタムスクリプトを書くことができます。ただし、にはスプレッドシートのそれぞれにスクリプトを追加する必要があります。また、そのような宣言的でないルールは、conditional formatting sidebarには表示されません。

私は単純に、値のないセルに赤い背景を適用しようとしています。

これはちょっとできませんか?

答えて

7

この場合、状況に応じて回避策を使用する必要があります。

ソーススプレッドシートで条件付き書式設定したセルがあるテンプレートシートを作成する必要があります。

スクリプトでは、このテンプレートシートをターゲットのスプレッドシートにコピーしてから、copyToメソッドを使用して、{formatOnly:true}という高度なパラメータを使用して、テンプレートシートの1つまたはセル範囲のフォーマットを選択したシート(最終的に、このテンプレートシートをターゲットのスプレッドシートから削除できます)。 copyToメソッドは、同じスプレッドシート内のある範囲から別の範囲にのみコピーします。このような

何か:

function transferFormatting() { 
    var targetSs = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1dLv8V5fKmmxRLi5maLIOgrxVGVaqGGOD7STHbEremQs/edit#gid=0'); 
    var targetSsDisplaySheet = targetSs.getSheets()[0]; 
    var sourceSs = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/14RxLXktm0wj-lSFrl5Fas9B-smMYhknFt3-dYQbwH3o/edit#gid=933388275'); 
    var templateSheet = sourceSs.getSheetByName('Template'); 
    var targetSsFormatTemplateSheet = templateSheet.copyTo(targetSs); 

    targetSsFormatTemplateSheet.getRange("A1").copyTo(targetSsDisplaySheet.getRange("B:D"), {formatOnly:true}); 
    targetSs.deleteSheet(targetSsFormatTemplateSheet); 
} 
+0

は非常に有望に見えました。ただし、copyTo()の範囲は、「申し訳ありません。サーバーエラーが発生しました。少し待ってからもう一度お試しください。 – Gary

+0

私はそれを試してみるためにスクリプトを書いてあります(それは私にとってはうまくいきます):https://docs.google.com/spreadsheets/d/1C_hlAX8KTQa33ltANKEalsy18-TDy6c4ArLwBre3yL4/edit#gid=2037749471試してみてくださいそれがあなたのために働かないなら私に知らせてください。 –

+0

フォーマットを転送するメソッドがあります。range.copyFormatToRange():https://developers.google.com/apps-script/reference/spreadsheet/range#copyFormatToRange(Integer,Integer,Integer,Integer,Integer) 以前は「申し訳ありません。サーバーエラーが発生しました。少し待ってからもう一度お試しください。答えの中の方法を使って。 –

3

また、利用可能なGoogle Appsのスクリプトから条件付き書式を追加するAdvanced Sheets Servicesです。

必ずスクリプトから高度なGoogleサービスを有効にしてください。

  • AddConditionalFormatRuleRequest
    • ConditionalFormatRule
        :次に、あなたは完全な要求をつなぎ合わせるために、各JSON表現オブジェクトを介して Google Sheets API v4高度なシートサービス

        移動を使用して条件付き書式を追加するためにSheets.Spreadsheets.batchUpdate(resource, spreadsheetId)を使用することができます

      • GridRange
      • BooleanRule
        • BooleanCondition
          • ConditionTypeを
        • CellFormat
// Conditionally sets the background of cells to red within range B2:J1000 
function setConditionalFormat() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var sheet = ss.getSheets()[0] 

    var format_req = { 
    "requests": [{ 
     "addConditionalFormatRule": { 
     "rule": { 
      "ranges": [{ 
      "sheetId": sheet.getSheetId(), 
      "startRowIndex": 1, 
      "endRowIndex": sheet.getMaxRows(), 
      "startColumnIndex": 1, 
      "endColumnIndex": 10 
      }], 
      "booleanRule": { 
      "condition": { 
       "type": "BLANK" 
      }, 
      "format": { 
       "backgroundColor": { 
       "red": 1, 
       "green": 0, 
       "blue": 0, 
       "alpha": 1 
       } 
      } 
      } 
     }, 
     "index": 0, 
     } 
    }], 
    "includeSpreadsheetInResponse": false, 
    } 

    Sheets.Spreadsheets.batchUpdate(JSON.stringify(format_req), ss.getId()) 
} 
0

次のコードでは、あなたのGoogleスプレッドシートテーブルの行を交互に書式を設定します:

function lastLine() { 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     var sheet = ss.getSheets()[0]; 

     var range = sheet.getRange("A1:A").getValues(); 

     return range.filter(String).length; 
    } 

    function setConditionalFormat() { 
     var ss = SpreadsheetApp.getActiveSpreadsheet() 
     var sheet = ss.getSheets()[0] 

     var myRange = { 
     'sheetId': sheet.getSheetId(), 
     'startRowIndex': 1, 
     'endRowIndex': lastLine(), 
     'startColumnIndex': 0, 
     'endColumnIndex': 8 
     } 


     var format_req = { 
     'requests': [ 
      {'addConditionalFormatRule': { 
      'index': 0, 
       'rule': { 
       'ranges': [ myRange ], 
        'booleanRule': { 
        'format': {'backgroundColor': {'red': 1, 'green': 1, 'blue': 1, 'alpha': 1}}, 
         'condition': { 
         'type': 'CUSTOM_FORMULA', 
         'values': [{'userEnteredValue': '=ISEVEN(ROW())'}] 
         }, 
        }, 
       }, 

      } 
      }, 
      {'addConditionalFormatRule': { 
      'index': 0, 
       'rule': { 
       'ranges': [ myRange ], 
        'booleanRule': { 
        'format': {'backgroundColor': {'red': 222/255, 'green': 235/255, 'blue': 246/255, 'alpha': 0.7}}, 
         'condition': { 
         'type': 'CUSTOM_FORMULA', 
         'values': 
          [{'userEnteredValue': '=ISODD(ROW())'}] 
         }, 
        }, 
       }, 

      } 
      }  
     ], 
     'includeSpreadsheetInResponse': false, 
     } 

     Sheets.Spreadsheets.batchUpdate(JSON.stringify(format_req), ss.getId()) 
    } 
+0

RGBAの背景色。 最大255または1 色が222の場合、10進数を得るには255で割り切る必要があります。 –

関連する問題