#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'write_xlsx' workbook = WriteXLSX.new('conditional_format.xlsx') worksheet1 = workbook.add_worksheet worksheet2 = workbook.add_worksheet worksheet3 = workbook.add_worksheet worksheet4 = workbook.add_worksheet worksheet5 = workbook.add_worksheet worksheet6 = workbook.add_worksheet worksheet7 = workbook.add_worksheet worksheet8 = workbook.add_worksheet # Light red fill with dark red text. format1 = workbook.add_format( :bg_color => '#FFC7CE', :color => '#9C0006' ) # Green fill with dark green text. format2 = workbook.add_format( :bg_color => '#C6EFCE', :color => '#006100' ) # Some sample data to run the conditional formatting against. data = [ [ 34, 72, 38, 30, 75, 48, 75, 66, 84, 86 ], [ 6, 24, 1, 84, 54, 62, 60, 3, 26, 59 ], [ 28, 79, 97, 13, 85, 93, 93, 22, 5, 14 ], [ 27, 71, 40, 17, 18, 79, 90, 93, 29, 47 ], [ 88, 25, 33, 23, 67, 1, 59, 79, 47, 36 ], [ 24, 100, 20, 88, 29, 33, 38, 54, 54, 88 ], [ 6, 57, 88, 28, 10, 26, 37, 7, 41, 48 ], [ 52, 78, 1, 96, 26, 45, 47, 33, 96, 36 ], [ 60, 54, 81, 66, 81, 90, 80, 93, 12, 55 ], [ 70, 5, 46, 14, 71, 19, 66, 36, 41, 21 ] ] ############################################################################### # # Example 1. # caption = 'Cells with values >= 50 are in light red. ' + 'Values < 50 are in light green.' # Write the data. worksheet1.write('A1', caption) worksheet1.write_col('B3', data) # Write a conditional format over a range. worksheet1.conditional_formatting('B3:K12', { :type => 'cell', :criteria => '>=', :value => 50, :format => format1 } ) # Write another conditional format over the same range. worksheet1.conditional_formatting('B3:K12', { :type => 'cell', :criteria => '<', :value => 50, :format => format2 } ) ############################################################################### # # Example 2. # caption = 'Values between 30 and 70 are in light red. ' + 'Values outside that range are in light green.' worksheet2.write('A1', caption) worksheet2.write_col('B3', data) worksheet2.conditional_formatting('B3:K12', { :type => 'cell', :criteria => 'between', :minimum => 30, :maximum => 70, :format => format1 } ) worksheet2.conditional_formatting('B3:K12', { :type => 'cell', :criteria => 'not between', :minimum => 30, :maximum => 70, :format => format2 } ) ############################################################################### # # Example 3. # caption = 'Duplicate values are in light red. ' + 'Unique values are in light green.' worksheet3.write('A1', caption) worksheet3.write_col('B3', data) worksheet3.conditional_formatting('B3:K12', { :type => 'duplicate', :format => format1, } ) worksheet3.conditional_formatting('B3:K12', { :type => 'unique', :format => format2, } ) ############################################################################### # # Example 4. # caption = 'Above average values are in light red. ' + 'Below average values are in light green.' worksheet4.write('A1', caption) worksheet4.write_col('B3', data) worksheet4.conditional_formatting('B3:K12', { :type => 'average', :criteria => 'above', :format => format1 } ) worksheet4.conditional_formatting('B3:K12', { :type => 'average', :criteria => 'below', :format => format2 } ) ############################################################################### # # Example 5. # caption = 'Top 10 values are in light red. ' + 'Bottom 10 values are in light green.' worksheet5.write('A1', caption) worksheet5.write_col('B3', data) worksheet5.conditional_formatting('B3:K12', { :type => 'top', :value => '10', :format => format1 } ) worksheet5.conditional_formatting('B3:K12', { :type => 'bottom', :value => '10', :format => format2 } ) ############################################################################### # # Example 6. # caption = 'Cells with values >= 50 are in light red. ' + 'Values < 50 are in light green. Non-contiguous ranges.' # Write the data. worksheet6.write('A1', caption) worksheet6.write_col('B3', data) # Write a conditional format over a range. worksheet6.conditional_formatting('B3:K6,B9:K12', { :type => 'cell', :criteria => '>=', :value => 50, :format => format1 } ) # Write another conditional format over the same range. worksheet6.conditional_formatting('B3:K6,B9:K12', { :type => 'cell', :criteria => '<', :value => 50, :format => format2 } ) ############################################################################### # # Example 7. # caption = 'Examples of color scales and data bars. Default colors.' data = 1 .. 12 worksheet7.write('A1', caption) worksheet7.write('B2', "2 Color Scale") worksheet7.write_col('B3', data) worksheet7.write('D2', "3 Color Scale") worksheet7.write_col('D3', data) worksheet7.write('F2', "Data Bars") worksheet7.write_col('F3', data) worksheet7.conditional_formatting('B3:B14', { :type => '2_color_scale' } ) worksheet7.conditional_formatting('D3:D14', { :type => '3_color_scale' } ) worksheet7.conditional_formatting('F3:F14', { :type => 'data_bar' } ) ############################################################################### # # Example 8. # caption = 'Examples of color scales and data bars. Modified colors.' data = 1 .. 12 worksheet8.write('A1', caption) worksheet8.write('B2', "2 Color Scale") worksheet8.write_col('B3', data) worksheet8.write('D2', "3 Color Scale") worksheet8.write_col('D3', data) worksheet8.write('F2', "Data Bars") worksheet8.write_col('F3', data) worksheet8.conditional_formatting('B3:B14', { :type => '2_color_scale', :min_color => "#FF0000", :max_color => "#00FF00" } ) worksheet8.conditional_formatting('D3:D14', { :type => '3_color_scale', :min_color => "#C5D9F1", :mid_color => "#8DB4E3", :max_color => "#538ED5" } ) worksheet8.conditional_formatting('F3:F14', { :type => 'data_bar', :bar_color => '#63C384' } ) workbook.close