fixed the sequence of detailed data line chart

pull/31/head
Caozhenhui 2021-04-12 16:06:44 +08:00
parent d12d84fef5
commit 5b6ed07339
4 changed files with 67 additions and 78 deletions

View File

@ -88,10 +88,10 @@ def timestamps_data_not_equal_0(lists):
def decimal_to_column(num=65):
string = ''
num = num - 64
# The column number is not greater than 90
# The column number is not greater than 90
if num <= 26:
return chr(num+64)
# The column number is greater than 90
return chr(num + 64)
# The column number is greater than 90
while num // 26 > 0:
if num % 26 == 0:
string += 'Z'
@ -99,7 +99,7 @@ def decimal_to_column(num=65):
else:
string += chr(num % 26 + 64)
num //= 26
# Avoid conversion errors that might occur between 741 and 766
# Avoid conversion errors that might occur between 741 and 766
if num > 0:
string += chr(num + 64)
@ -257,8 +257,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
ws[col + '7'].fill = table_fill
ws[col + '7'].font = name_font
ws[col + '7'].alignment = c_c_alignment
ws[col + '7'] = report['meter']['energy_category_name'] + \
" (" + report['meter']['unit_of_measure'] + ")"
ws[col + '7'] = report['meter']['energy_category_name'] + " (" + report['meter']['unit_of_measure'] + ")"
ws[col + '7'].border = f_border
ws[col + '8'].font = name_font
@ -328,29 +327,32 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
has_cost_datail_flag = False
if has_cost_datail_flag:
parameters_names_len = len(report['parameters']['names'])
start_detail_data_row_number = 7 + (parameters_names_len + ca_len) * 6
ws['B11'].font = title_font
ws['B11'] = name + '详细数据'
ws.row_dimensions[18].height = 60
ws['B18'].fill = table_fill
ws['B18'].font = title_font
ws['B18'].border = f_border
ws['B18'].alignment = c_c_alignment
ws['B18'] = '日期时间'
ws.row_dimensions[start_detail_data_row_number].height = 60
ws['B' + str(start_detail_data_row_number)].fill = table_fill
ws['B' + str(start_detail_data_row_number)].font = title_font
ws['B' + str(start_detail_data_row_number)].border = f_border
ws['B' + str(start_detail_data_row_number)].alignment = c_c_alignment
ws['B' + str(start_detail_data_row_number)] = '日期时间'
time = times
has_data = False
max_row = 0
if len(time) > 0:
has_data = True
max_row = 18 + len(time)
max_row = start_detail_data_row_number + len(time)
if has_data:
end_data_row_number = 19
end_data_row_number = start_detail_data_row_number
for i in range(0, len(time)):
col = 'B'
end_data_row_number = 19 + i
end_data_row_number += 1
row = str(end_data_row_number)
ws[col + row].font = title_font
@ -367,18 +369,18 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
col = chr(ord('C') + i)
ws[col + '18'].fill = table_fill
ws[col + '18'].font = title_font
ws[col + '18'].alignment = c_c_alignment
ws[col + '18'] = report['meter']['energy_category_name'] + \
" (" + report['meter']['unit_of_measure'] + ")"
ws[col + '18'].border = f_border
ws[col + str(start_detail_data_row_number)].fill = table_fill
ws[col + str(start_detail_data_row_number)].font = title_font
ws[col + str(start_detail_data_row_number)].alignment = c_c_alignment
ws[col + str(start_detail_data_row_number)] = \
report['meter']['energy_category_name']+" (" + report['meter']['unit_of_measure'] + ")"
ws[col + str(start_detail_data_row_number)].border = f_border
time = times
time_len = len(time)
for j in range(0, time_len):
row = str(19 + j)
row = str(start_detail_data_row_number + 1 + j)
ws[col + row].font = title_font
ws[col + row].alignment = c_c_alignment
@ -393,9 +395,9 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
line = LineChart()
line.title = '报告期成本 - ' + report['meter']['energy_category_name'] + \
" (" + report['meter']['unit_of_measure'] + ")"
line_data = Reference(ws, min_col=3, min_row=18, max_row=max_row)
line_data = Reference(ws, min_col=3, min_row=start_detail_data_row_number, max_row=max_row)
line.series.append(Series(line_data, title_from_data=True))
labels = Reference(ws, min_col=2, min_row=19, max_row=max_row)
labels = Reference(ws, min_col=2, min_row=start_detail_data_row_number + 1, max_row=max_row)
line.set_categories(labels)
line_data = line.series[0]
line_data.marker.symbol = "circle"
@ -414,7 +416,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
##########################################
has_parameters_names_and_timestamps_and_values_data = True
# 12 is the starting line number of the last line chart in the report period
current_sheet_parameters_row_number = 15 + ca_len * 6 + time_len
time_len = len(reporting_period_data['timestamps'])
current_sheet_parameters_row_number = 12 + ca_len * 6
if 'parameters' not in report.keys() or \
report['parameters'] is None or \
'names' not in report['parameters'].keys() or \

View File

@ -333,28 +333,30 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
reporting_period_data = report['reporting_period']
category = report['meter']['energy_category_name']
ca_len = len(category)
parameters_names_len = len(report['parameters']['names'])
start_detail_data_row_num = 7 + (parameters_names_len + ca_len) * 6
ws['B11'].font = title_font
ws['B11'] = name + '详细数据'
ws.row_dimensions[18].height = 60
ws.row_dimensions[start_detail_data_row_num].height = 60
ws['B18'].fill = table_fill
ws['B18'].font = title_font
ws['B18'].border = f_border
ws['B18'].alignment = c_c_alignment
ws['B18'] = '日期时间'
ws['B' + str(start_detail_data_row_num)].fill = table_fill
ws['B' + str(start_detail_data_row_num)].font = title_font
ws['B' + str(start_detail_data_row_num)].border = f_border
ws['B' + str(start_detail_data_row_num)].alignment = c_c_alignment
ws['B' + str(start_detail_data_row_num)] = '日期时间'
time = times
has_data = False
max_row = 0
if len(time) > 0:
has_data = True
max_row = 18 + len(time)
max_row = start_detail_data_row_num + len(time)
if has_data:
for i in range(0, len(time)):
col = 'B'
row = str(19 + i)
row = str(start_detail_data_row_num + 1 + i)
# col = chr(ord('B') + i)
ws[col + row].font = title_font
ws[col + row].alignment = c_c_alignment
@ -365,19 +367,19 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
# 12 title
col = chr(ord('C') + i)
ws[col + '18'].fill = table_fill
ws[col + '18'].font = title_font
ws[col + '18'].alignment = c_c_alignment
ws[col + '18'] = report['meter']['energy_category_name'] + \
ws[col + str(start_detail_data_row_num)].fill = table_fill
ws[col + str(start_detail_data_row_num)].font = title_font
ws[col + str(start_detail_data_row_num)].alignment = c_c_alignment
ws[col + str(start_detail_data_row_num)] = report['meter']['energy_category_name'] + \
" (" + report['meter']['unit_of_measure'] + ")"
ws[col + '18'].border = f_border
ws[col + str(start_detail_data_row_num)].border = f_border
# 13 data
time = times
time_len = len(time)
for j in range(0, time_len):
row = str(19 + j)
row = str(start_detail_data_row_num + 1 + j)
# col = chr(ord('B') + i)
ws[col + row].font = title_font
ws[col + row].alignment = c_c_alignment
@ -388,8 +390,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
line = LineChart()
line.title = '报告期消耗 - ' + report['meter']['energy_category_name'] + \
" (" + report['meter']['unit_of_measure'] + ")"
labels = Reference(ws, min_col=2, min_row=19, max_row=max_row)
bar_data = Reference(ws, min_col=3, min_row=18, max_row=max_row)
labels = Reference(ws, min_col=2, min_row=start_detail_data_row_num + 1, max_row=max_row)
bar_data = Reference(ws, min_col=3, min_row=start_detail_data_row_num, max_row=max_row)
line.add_data(bar_data, titles_from_data=True)
line.set_categories(labels)
line_data = line.series[0]
@ -410,7 +412,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
ws.add_chart(line, "B12")
col = 'B'
row = str(19 + len(time))
row = str(start_detail_data_row_num + 1 + len(time))
ws[col + row].font = title_font
ws[col + row].alignment = c_c_alignment
@ -432,8 +434,9 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
has_parameters_names_and_timestamps_and_values_data = True
# 12 is the starting line number of the last line chart in the report period
category = report['meter']['energy_category_name']
time_len = len(reporting_period_data['timestamps'])
ca_len = len(category)
current_sheet_parameters_row_number = 15 + ca_len * 6 + time_len
current_sheet_parameters_row_number = 12 + ca_len * 6
if 'parameters' not in report.keys() or \
report['parameters'] is None or \
'names' not in report['parameters'].keys() or \

View File

@ -290,6 +290,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
current_row_number += 2
time = reporting_period_data['timestamps']
parameters_names_len = len(report['parameters']['names'])
has_time_data_flag = False
if time is not None and len(time) > 0:
has_time_data_flag = True
@ -301,7 +302,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
current_row_number += 1
chart_start_number = current_row_number
current_row_number = current_row_number + 6
current_row_number = current_row_number + 7 + parameters_names_len * 6
table_start_number = current_row_number
ws.row_dimensions[current_row_number].height = 60
@ -374,7 +375,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
category = report['meter']['energy_category_name']
ca_len = len(category)
time_len = len(report['reporting_period']['timestamps'])
current_sheet_parameters_row_number = 17 + ca_len * 6 + time_len
current_sheet_parameters_row_number = 14 + ca_len * 6
if 'parameters' not in report.keys() or \
report['parameters'] is None or \
'names' not in report['parameters'].keys() or \
@ -551,10 +552,6 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d
chart_start_row_number += 6
ws.add_chart(line, chart_cell)
current_sheet_parameters_row_number = chart_start_row_number
current_sheet_parameters_row_number += 1
filename = str(uuid.uuid4()) + '.xlsx'
wb.save(filename)

View File

@ -199,14 +199,6 @@ def generate_excel(report,
ws['C3'].font = name_font
ws['C3'] = name
ws['D3'].font = name_font
ws['D3'].alignment = b_r_alignment
ws['D3'] = 'Period:'
ws['E3'].border = b_border
ws['E3'].alignment = b_c_alignment
ws['E3'].font = name_font
ws['E3'] = period_type
ws['F3'].font = name_font
ws['F3'].alignment = b_r_alignment
ws['F3'] = 'Date:'
@ -247,6 +239,7 @@ def generate_excel(report,
ca_len = len(ca)
temp_max_row = 0
times = reporting_period_data['timestamps']
category = report['meter']['energy_category_name']
if has_data_flag:
ws['B6'].font = title_font
ws['B6'] = name + ' 趋势'
@ -258,13 +251,18 @@ def generate_excel(report,
ws['B7'].alignment = c_c_alignment
ws['B7'] = '日期时间'
time = times[0]
for time in times:
if len(time) > 0:
break
has_data = False
max_row = 0
current_sheet_parameters_row_number = 10
if len(time) > 0:
has_data = True
max_row = 8 + len(time)
# print("max_row", max_row)
temp_max_row = max_row
current_sheet_parameters_row_number = 2 + ca_len * 6 + temp_max_row
if has_data:
for i in range(0, len(time)):
col = 'B'
@ -285,19 +283,18 @@ def generate_excel(report,
ws[col + '7'] = reporting_period_data['names'][i]
ws[col + '7'].border = f_border
# 39 data
time = times[i]
time_len = len(time)
for j in range(0, len(time)):
for j in range(0, time_len):
row = str(8 + j)
# col = chr(ord('B') + i)
ws[col + row].font = title_font
ws[col + row].alignment = c_c_alignment
ws[col + row] = round(reporting_period_data['values'][i][j], 3)
ws[col + row] = round(reporting_period_data['values'][i][j], 3) if \
len(reporting_period_data['values'][i]) > 0 is not None and \
reporting_period_data['values'][i][j] is not None else " "
ws[col + row].border = f_border
# line
# 39~: line
# line
# 39~: line
line = LineChart()
line.title = '趋势值 - ' + reporting_period_data['names'][i]
labels = Reference(ws, min_col=2, min_row=8, max_row=max_row-1)
@ -319,21 +316,18 @@ def generate_excel(report,
# s1 = CharacterProperties(sz=1800) # font size *100
chart_col = chr(ord('B'))
chart_cell = chart_col + str(max_row + 2 + 6*i)
print("chart_cell", chart_cell)
ws.add_chart(line, chart_cell)
else:
pass
for i in range(8, temp_max_row + 1 + 1 + + ca_len * 6):
for i in range(8, temp_max_row + 1 + 1 + + ca_len * 6 + len(category) * 6 + 2):
ws.row_dimensions[i].height = 42
##########################################
has_parameters_names_and_timestamps_and_values_data = True
# 12 is the starting line number of the last line chart in the report period
category = report['meter']['energy_category_name']
ca_len = len(category)
time_len = len(report['reporting_period']['timestamps'])
current_sheet_parameters_row_number = 17 + ca_len * 6 + time_len
if 'parameters' not in report.keys() or \
report['parameters'] is None or \
'names' not in report['parameters'].keys() or \
@ -396,14 +390,6 @@ def generate_excel(report,
parameters_ws['C3'].font = name_font
parameters_ws['C3'] = name
parameters_ws['D3'].font = name_font
parameters_ws['D3'].alignment = b_r_alignment
parameters_ws['D3'] = 'Period:'
parameters_ws['E3'].border = b_border
parameters_ws['E3'].alignment = b_c_alignment
parameters_ws['E3'].font = name_font
parameters_ws['E3'] = period_type
parameters_ws['F3'].font = name_font
parameters_ws['F3'].alignment = b_r_alignment
parameters_ws['F3'] = 'Date:'