Xlsxwriter - не отображает 0 после выполнения условного формата
У меня есть код ниже, который выполняет условное форматирование с использованием пакета Xlsxwriter. Единственная проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что когда значение ячейки равно 0 (ноль), ячейки форматируются в соответствии с условием, но число не отображается. Однако, когда я нажимаю на ячейку, я вижу значение на панели формул Excel. Может ли кто-нибудь совет относительно того, как я мог показать нулевое значение.
db_conn()
dwh_cur.execute("""select prod.name,count(sale.id),count(is_defect), count(sale.is_defect)/count(sale.id) as Percent
from sales group by prod.name""")
df = dwh_cur.fetchall()
workbook = xlsxwriter.Workbook('Report.xlsx')
worksheet1 = workbook.add_worksheet('Report')
number_format = workbook.add_format({'num_format': '#,###', 'font_size': 14})
#Conditional format - Dark Red color
bad = workbook.add_format({'bg_color': '#ff0000',
'font_size': 14,
'font_name' :'Calibri',
'font_color': '#000000'})
#Conditional format - Red color
notbad = workbook.add_format({'bg_color': '#dd5b5b',
'font_size': 14,
'font_name' :'Calibri',
'font_color': '#000000'})
#Conditional format - Green color
good = workbook.add_format({'bg_color': '#008000',
'font_size': 14,
'font_name' :'Calibri',
'font_color': '#000000'})
#Conditional format - Orange color
ok = workbook.add_format({'bg_color': '#ffa500',
'font_size': 14,
'font_name': 'Calibri',
'font_color': '#000000'})
worksheet1.conditional_format('E2:E200',
{'type': 'formula',
'criteria': '=$E2 <= 20',
'format': bad})
worksheet1.conditional_format('E2:E200',
{'type': 'formula',
'criteria': '=$E2 <= 49',
'format': notbad})
worksheet1.conditional_format('E2:E200',
{'type': 'formula',
'criteria': '=$E2 >= 80',
'format': good})
worksheet1.conditional_format('E2:E200',
{'type': 'formula',
'criteria': '=$E2 <= 79',
'format': ok})
column_format = workbook.add_format({
'bold': 1,
'border': 0,
'font_size': 14,
'font_color': 'black'})
## Raw data Sheet (Report 1)
worksheet1.conditional_format('A1:E1', {'type': 'no_errors', 'format': light_blue_bg_format})
worksheet1.set_column(0, 20, 30)
# Adding title on the first row
worksheet1.write('A1', 'Prod Name', column_format)
worksheet1.write('B1', 'Total Count', column_format)
worksheet1.write('C1', 'Defect Count', column_format)
worksheet1.write('D1', 'Percent', column_format)
# Pulling monthly data for columns for weekly raw data sheet
row = 1
col = 0
# Iterate through the array you have and unpack the tuple at each index
for elm1, elm2, elm3, elm4, elm5 in df:
worksheet1.write(row, col, elm1, number_format)
worksheet1.write(row, col + 1, elm2, number_format)
worksheet1.write(row, col + 2, elm3, number_format)
worksheet1.write(row, col + 3, elm4, number_format)
row += 1
workbook.close()
Образец вида df
Prod Name,Total Count,Defect Count,Percent
Prod_A,10,3,30%
Prod_B,20,10,50%
Prod_C,8,0,0%
Prod_D,2,0,0%
Учитывая приведенный выше пример представления df, последние 2 строки не отображают 0%, но имеют ячейки, отформатированные так, чтобы они были красными в соответствии с правилом условного форматирования, установленным выше. Но при нажатии на ячейку, мы можем увидеть 0% в ячейке.
Проблема возникает, когда count(sale.is_defect) равен 0, ячейка пуста, хотя при нажатии на панель формул отображается 0. То же относится и к столбцу, который условно отформатирован.
1 ответ
Проблема не связана с условными форматами. Вопрос здесь:
number_format = workbook.add_format({'num_format': '#,###', 'font_size': 14})
это #,###
Числовой формат вызывает скрытие нулевых значений. Я не знаю, является ли это действительным форматом или нет. Возможно, вам нужно проверить это в Excel.
Будет работать что-то вроде следующего:
number_format = workbook.add_format({'num_format': '0.000', 'font_size': 14})
# Or:
number_format = workbook.add_format({'num_format': '#,##0', 'font_size': 14})