From 5b6ed073390dcecc7b125835bb672b1950a4217c Mon Sep 17 00:00:00 2001 From: Caozhenhui <823914102@qq.com> Date: Mon, 12 Apr 2021 16:06:44 +0800 Subject: [PATCH] fixed the sequence of detailed data line chart --- myems-api/excelexporters/metercost.py | 53 ++++++++++--------- myems-api/excelexporters/meterenergy.py | 39 +++++++------- .../excelexporters/metersubmetersbalance.py | 9 ++-- myems-api/excelexporters/metertrend.py | 44 ++++++--------- 4 files changed, 67 insertions(+), 78 deletions(-) diff --git a/myems-api/excelexporters/metercost.py b/myems-api/excelexporters/metercost.py index 8d190590..dbb51c70 100644 --- a/myems-api/excelexporters/metercost.py +++ b/myems-api/excelexporters/metercost.py @@ -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 \ diff --git a/myems-api/excelexporters/meterenergy.py b/myems-api/excelexporters/meterenergy.py index 41df793f..a7310abb 100644 --- a/myems-api/excelexporters/meterenergy.py +++ b/myems-api/excelexporters/meterenergy.py @@ -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 \ diff --git a/myems-api/excelexporters/metersubmetersbalance.py b/myems-api/excelexporters/metersubmetersbalance.py index 85eb2af9..481d761f 100644 --- a/myems-api/excelexporters/metersubmetersbalance.py +++ b/myems-api/excelexporters/metersubmetersbalance.py @@ -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) diff --git a/myems-api/excelexporters/metertrend.py b/myems-api/excelexporters/metertrend.py index c21d847f..6f325912 100644 --- a/myems-api/excelexporters/metertrend.py +++ b/myems-api/excelexporters/metertrend.py @@ -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:'