In xlswriter, once a format is defined, how can you apply it to a range and not to the whole column or the whole row?
for example:
perc_fmt = workbook.add_format({'num_format': '0.00%','align': 'center'})
worksheet.set_column('B:B', 10.00, perc_fmt)
this gets applied it to the whole "B" column, but how can this "perc_fmt" applied to a range, for example, if I do:
range2 = "B2:C15"
worksheet2.write(range2, perc_fmt)
it says:
TypeError: Unsupported type <class 'xlsxwriter.format.Format'> in write()
Actually I found a workaround that avoids doing the loop. You just need to use the conditional formatting (that takes a range as an input) and just format all cases. For example:
worksheet2.conditional_format(color_range2, {'type': 'cell',
'criteria': '>=',
'value': 0, 'format': perc_fmt})
worksheet2.conditional_format(color_range2, {'type': 'cell',
'criteria': '<',
'value': 0, 'format': perc_fmt})
It took me quite a time to find this answer, so thank you. I would offer up the additional solution with just one block when your range includes blanks and text fields. This turns the range A2:N5 to my format of peach coloring I defined earlier in my code. Of course you have to make the number more negative if you actually have large negative numbers in your dataset.
worksheet.conditional_format('A2:N5', {'type': 'cell',
'criteria' : '>',
'value' : -99999999999,
'format' : peach_format})
I originally tried 'criteria' : '<>', 'value' : 0 but that did not catch the blank cells. If you use the < 99999999999 it would code the text fields as False and would not code them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With