5

Google E-Tablolar, koşullu biçimlendirmeyi bildirimsel olarak tanımlamak için harika bir etkileşime sahiptir. App Betiği kullanarak aynı bildirim modelini programlamanın bir yolu var mı?Koşullu biçimlendirme kuralı ekle

Birçok e-tablo oluşturan bir komut dosyası var. Veri ve veri doğrulama kurallarını Sheet ve DataValidation sınıflarını kullanarak ayarlıyorum. Ancak, koşullu biçimlendirme için aynı şeyi yapamıyorum. Bir ConditionalFormattingRule nesnesini veya bunun gibi bir şey bulmayı bekledim.

Not:onEdit trigger için dinleyen özel komut dosyasının yazılabileceğini biliyorum. Ancak, bu betiğin here-tablosuna eklenmesi gerekir. Ayrıca, bu gibi bildirim dışı kurallar conditional formatting sidebar'da görünmez.

Sadece değeri olmayan hücrelere kırmızı bir arka plan uygulamak istiyorum.

Bu mümkün mü değil?

cevap

7

Bu durumda, durumunuz için uygunsa, bir geçici çözüm kullanmanız gerektiğine inanıyorum. Bir kaynak elektronik tablosunda koşullu biçimlendirme (el ile yapılan) tarafından biçimlendirilmiş hücrelere sahip bir şablon sayfası oluşturmanız gerekir.

Ardından, komut dosyanız bu şablon sayfasını hedef elektronik tablonuza kopyalayacak ve daha sonra şablon sayfasındaki bir veya bir hücre aralığının biçimini kopyalamak için gelişmiş formatta {formatOnly: true} olan copyTo yöntemini kullanır. seçtiğiniz sayfanız (son olarak, bu şablon sayfasını hedef e-tablodan silebilirsiniz). (CopyTo yöntemi aynı e-tabloda yalnızca bir aralıktan diğerine kopyalar). Böyle

şey: Ayrıca

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

çok umut verici görünüyordu. Ancak, copyTo() aralığındaki aralık sürekli olarak "Üzgünüz, bir sunucu hatası oluştu. Başarısız olun. Lütfen biraz bekleyin ve tekrar deneyin." – Gary

+0

Komut dosyasını bir e-tabloya denemek için koymuştum (ve benim için çalışıyor): https://docs.google.com/spreadsheets/d/1C_hlAX8KTQa33ltANKEalsy18-TDy6c4ArLwBre3yL4/edit#gid=2037749471 Deneyin ve İşe yaramazsa bana haber ver. –

+0

Artık biçimlendirmeyi transfer etmek için bir yöntem var .copyFormatToRange(): https://developers.google.com/apps-script/reference/spreadsheet/range#copyFormatToRange(Integer,Integer,Integer ,Integer ,Integer) Daha önce "Üzgünüz, bir sunucu hatası oluştu. Lütfen biraz bekleyin ve tekrar deneyin." Yöntemi cevapta kullanarak. –

3

sunulan Google Apps Kodu dan Koşullu Biçimlendirme eklemek Advanced Sheets Services olduğunu.

Komut dosyanızdan Gelişmiş Google Hizmetleri'ni etkinleştirdiğinizden emin olun.

  • AddConditionalFormatRuleRequest
    • ConditionalFormatRule
        : Sonra tam isteği araya getirmek her JSON gösterimi nesnesi aracılığıyla Google Sheets API v4 ve Gelişmiş Sayfaları Hizmetleri

        gidin kullanarak koşullu biçimlendirme eklemek için Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId) kullanabilirsiniz

      • 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

Aşağıdaki kodu, Google Tablolar tablodaki satırları dönüşümlü biçimlendirir:

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

Artalan Rengi. Max 255 veya 1 Rengi 222 ise, ondalık sayı almak için 255 bölü gerekir. –