@@ 386-493 (lines=108) @@ | ||
383 | len(reporting_period_data['timestamps'][0]) == 0: |
|
384 | has_timestamps_data = False |
|
385 | ||
386 | if has_values_data and has_timestamps_data: |
|
387 | ca_len = len(reporting_period_data['names']) |
|
388 | time = reporting_period_data['timestamps'][0] |
|
389 | ||
390 | ws['B' + str(current_row_number)].font = title_font |
|
391 | ws['B' + str(current_row_number)] = name + ' 详细数据' |
|
392 | ||
393 | current_row_number += 1 |
|
394 | ||
395 | chart_start_row_number = current_row_number |
|
396 | ||
397 | current_row_number += ca_len * 6 |
|
398 | table_start_row_number = current_row_number |
|
399 | ||
400 | ws['B' + str(current_row_number)].fill = table_fill |
|
401 | ws['B' + str(current_row_number)].font = title_small_font |
|
402 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
403 | ws['B' + str(current_row_number)].border = f_border |
|
404 | ws['B' + str(current_row_number)] = '日期时间' |
|
405 | ||
406 | col = 'C' |
|
407 | ||
408 | for i in range(0, ca_len): |
|
409 | ws[col + str(current_row_number)].fill = table_fill |
|
410 | ws[col + str(current_row_number)].font = title_small_font |
|
411 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
412 | ws[col + str(current_row_number)].border = f_border |
|
413 | ws[col + str(current_row_number)] = \ |
|
414 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
415 | col = chr(ord(col) + 1) |
|
416 | ||
417 | current_row_number += 1 |
|
418 | ||
419 | for i in range(0, len(time)): |
|
420 | ws['B' + str(current_row_number)].font = title_font |
|
421 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
422 | ws['B' + str(current_row_number)].border = f_border |
|
423 | ws['B' + str(current_row_number)] = time[i] |
|
424 | ||
425 | col = 'C' |
|
426 | for j in range(0, ca_len): |
|
427 | ws[col + str(current_row_number)].font = title_font |
|
428 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
429 | ws[col + str(current_row_number)].border = f_border |
|
430 | ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2) \ |
|
431 | if reporting_period_data['values'][j][i] is not None else 0.00 |
|
432 | col = chr(ord(col) + 1) |
|
433 | ||
434 | current_row_number += 1 |
|
435 | ||
436 | table_end_row_number = current_row_number - 1 |
|
437 | ||
438 | ws['B' + str(current_row_number)].font = title_font |
|
439 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
440 | ws['B' + str(current_row_number)].border = f_border |
|
441 | ws['B' + str(current_row_number)] = '小计' |
|
442 | ||
443 | col = 'C' |
|
444 | ||
445 | for i in range(0, ca_len): |
|
446 | ws[col + str(current_row_number)].font = title_font |
|
447 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
448 | ws[col + str(current_row_number)].border = f_border |
|
449 | ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2) |
|
450 | col = chr(ord(col) + 1) |
|
451 | ||
452 | current_row_number += 2 |
|
453 | ||
454 | format_time_width_number = 1.0 |
|
455 | min_len_number = 1.0 |
|
456 | min_width_number = 11.0 # format_time_width_number * min_len_number + 4 and min_width_number > 11.0 |
|
457 | ||
458 | if period_type == 'hourly': |
|
459 | format_time_width_number = 4.0 |
|
460 | min_len_number = 2 |
|
461 | min_width_number = 12.0 |
|
462 | elif period_type == 'daily': |
|
463 | format_time_width_number = 2.5 |
|
464 | min_len_number = 4 |
|
465 | min_width_number = 14.0 |
|
466 | elif period_type == 'monthly': |
|
467 | format_time_width_number = 2.1 |
|
468 | min_len_number = 4 |
|
469 | min_width_number = 12.4 |
|
470 | elif period_type == 'yearly': |
|
471 | format_time_width_number = 1.5 |
|
472 | min_len_number = 5 |
|
473 | min_width_number = 11.5 |
|
474 | ||
475 | for i in range(0, ca_len): |
|
476 | bar = BarChart() |
|
477 | bar.title = \ |
|
478 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
479 | labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number) |
|
480 | bar_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number, max_row=table_end_row_number) |
|
481 | bar.add_data(bar_data, titles_from_data=True) |
|
482 | bar.set_categories(labels) |
|
483 | bar.height = 5.85 |
|
484 | bar.width = format_time_width_number * len(time) if len(time) > min_len_number else min_width_number |
|
485 | if bar.width > 24: |
|
486 | bar.width = 24 |
|
487 | bar.dLbls = DataLabelList() |
|
488 | bar.dLbls.showVal = False |
|
489 | bar.dLbls.showPercent = True |
|
490 | chart_col = 'B' |
|
491 | chart_cell = chart_col + str(chart_start_row_number) |
|
492 | chart_start_row_number += 6 |
|
493 | ws.add_chart(bar, chart_cell) |
|
494 | ||
495 | filename = str(uuid.uuid4()) + '.xlsx' |
|
496 | wb.save(filename) |
@@ 523-628 (lines=106) @@ | ||
520 | len(reporting_period_data['timestamps'][0]) == 0: |
|
521 | has_timestamps_data = False |
|
522 | ||
523 | if has_values_saving_data and has_timestamps_data: |
|
524 | ca_len = len(reporting_period_data['names']) |
|
525 | time = reporting_period_data['timestamps'][0] |
|
526 | ||
527 | ws['B' + str(current_row_number)].font = title_font |
|
528 | ws['B' + str(current_row_number)] = name + ' 详细数据' |
|
529 | ||
530 | current_row_number += 1 |
|
531 | ||
532 | chart_start_row_number = current_row_number |
|
533 | ||
534 | current_row_number += ca_len * 5 |
|
535 | table_start_row_number = current_row_number |
|
536 | ||
537 | ws['B' + str(current_row_number)].fill = table_fill |
|
538 | ws['B' + str(current_row_number)].font = title_font |
|
539 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
540 | ws['B' + str(current_row_number)].border = f_border |
|
541 | ws['B' + str(current_row_number)] = '日期时间' |
|
542 | ||
543 | col = 'C' |
|
544 | ||
545 | for i in range(0, ca_len): |
|
546 | ws[col + str(current_row_number)].fill = table_fill |
|
547 | ws[col + str(current_row_number)].font = title_font |
|
548 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
549 | ws[col + str(current_row_number)].border = f_border |
|
550 | ws[col + str(current_row_number)] = \ |
|
551 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
552 | col = chr(ord(col) + 1) |
|
553 | ||
554 | current_row_number += 1 |
|
555 | ||
556 | for i in range(0, len(time)): |
|
557 | ws['B' + str(current_row_number)].font = title_font |
|
558 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
559 | ws['B' + str(current_row_number)].border = f_border |
|
560 | ws['B' + str(current_row_number)] = time[i] |
|
561 | ||
562 | col = 'C' |
|
563 | for j in range(0, ca_len): |
|
564 | ws[col + str(current_row_number)].font = title_font |
|
565 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
566 | ws[col + str(current_row_number)].border = f_border |
|
567 | ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \ |
|
568 | if reporting_period_data['values_saving'][j][i] is not None else 0.00 |
|
569 | col = chr(ord(col) + 1) |
|
570 | ||
571 | current_row_number += 1 |
|
572 | ||
573 | table_end_row_number = current_row_number - 1 |
|
574 | ||
575 | ws['B' + str(current_row_number)].font = title_font |
|
576 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
577 | ws['B' + str(current_row_number)].border = f_border |
|
578 | ws['B' + str(current_row_number)] = '小计' |
|
579 | ||
580 | col = 'C' |
|
581 | ||
582 | for i in range(0, ca_len): |
|
583 | ws[col + str(current_row_number)].font = title_font |
|
584 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
585 | ws[col + str(current_row_number)].border = f_border |
|
586 | ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2) |
|
587 | col = chr(ord(col) + 1) |
|
588 | ||
589 | current_row_number += 2 |
|
590 | ||
591 | format_time_width_number = 1.0 |
|
592 | min_len_number = 1.0 |
|
593 | min_width_number = 11.0 # format_time_width_number * min_len_number + 4 and min_width_number > 11.0 |
|
594 | ||
595 | if period_type == 'hourly': |
|
596 | format_time_width_number = 4.0 |
|
597 | min_len_number = 2 |
|
598 | min_width_number = 12.0 |
|
599 | elif period_type == 'daily': |
|
600 | format_time_width_number = 2.5 |
|
601 | min_len_number = 4 |
|
602 | min_width_number = 14.0 |
|
603 | elif period_type == 'monthly': |
|
604 | format_time_width_number = 2.1 |
|
605 | min_len_number = 4 |
|
606 | min_width_number = 12.4 |
|
607 | elif period_type == 'yearly': |
|
608 | format_time_width_number = 1.5 |
|
609 | min_len_number = 5 |
|
610 | min_width_number = 11.5 |
|
611 | ||
612 | for i in range(0, ca_len): |
|
613 | bar = BarChart() |
|
614 | bar.title = \ |
|
615 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
616 | labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number) |
|
617 | bar_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number, max_row=table_end_row_number) |
|
618 | bar.add_data(bar_data, titles_from_data=True) |
|
619 | bar.set_categories(labels) |
|
620 | bar.height = 5.25 |
|
621 | bar.width = format_time_width_number * len(time) if len(time) > min_len_number else min_width_number |
|
622 | bar.dLbls = DataLabelList() |
|
623 | bar.dLbls.showVal = True |
|
624 | bar.dLbls.showPercent = True |
|
625 | chart_col = 'B' |
|
626 | chart_cell = chart_col + str(chart_start_row_number) |
|
627 | chart_start_row_number += 5 |
|
628 | ws.add_chart(bar, chart_cell) |
|
629 | ||
630 | filename = str(uuid.uuid4()) + '.xlsx' |
|
631 | wb.save(filename) |
@@ 438-543 (lines=106) @@ | ||
435 | len(reporting_period_data['timestamps'][0]) == 0: |
|
436 | has_timestamps_data = False |
|
437 | ||
438 | if has_values_saving_data and has_timestamps_data: |
|
439 | ca_len = len(reporting_period_data['names']) |
|
440 | time = reporting_period_data['timestamps'][0] |
|
441 | ||
442 | ws['B' + str(current_row_number)].font = title_font |
|
443 | ws['B' + str(current_row_number)] = name + ' 详细数据' |
|
444 | ||
445 | current_row_number += 1 |
|
446 | ||
447 | chart_start_row_number = current_row_number |
|
448 | ||
449 | current_row_number += ca_len * 5 |
|
450 | table_start_row_number = current_row_number |
|
451 | ||
452 | ws['B' + str(current_row_number)].fill = table_fill |
|
453 | ws['B' + str(current_row_number)].font = title_font |
|
454 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
455 | ws['B' + str(current_row_number)].border = f_border |
|
456 | ws['B' + str(current_row_number)] = '日期时间' |
|
457 | ||
458 | col = 'C' |
|
459 | ||
460 | for i in range(0, ca_len): |
|
461 | ws[col + str(current_row_number)].fill = table_fill |
|
462 | ws[col + str(current_row_number)].font = title_font |
|
463 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
464 | ws[col + str(current_row_number)].border = f_border |
|
465 | ws[col + str(current_row_number)] = \ |
|
466 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
467 | col = chr(ord(col) + 1) |
|
468 | ||
469 | current_row_number += 1 |
|
470 | ||
471 | for i in range(0, len(time)): |
|
472 | ws['B' + str(current_row_number)].font = title_font |
|
473 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
474 | ws['B' + str(current_row_number)].border = f_border |
|
475 | ws['B' + str(current_row_number)] = time[i] |
|
476 | ||
477 | col = 'C' |
|
478 | for j in range(0, ca_len): |
|
479 | ws[col + str(current_row_number)].font = title_font |
|
480 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
481 | ws[col + str(current_row_number)].border = f_border |
|
482 | ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \ |
|
483 | if reporting_period_data['values_saving'][j][i] is not None else 0.00 |
|
484 | col = chr(ord(col) + 1) |
|
485 | ||
486 | current_row_number += 1 |
|
487 | ||
488 | table_end_row_number = current_row_number - 1 |
|
489 | ||
490 | ws['B' + str(current_row_number)].font = title_font |
|
491 | ws['B' + str(current_row_number)].alignment = c_c_alignment |
|
492 | ws['B' + str(current_row_number)].border = f_border |
|
493 | ws['B' + str(current_row_number)] = '小计' |
|
494 | ||
495 | col = 'C' |
|
496 | ||
497 | for i in range(0, ca_len): |
|
498 | ws[col + str(current_row_number)].font = title_font |
|
499 | ws[col + str(current_row_number)].alignment = c_c_alignment |
|
500 | ws[col + str(current_row_number)].border = f_border |
|
501 | ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2) |
|
502 | col = chr(ord(col) + 1) |
|
503 | ||
504 | current_row_number += 2 |
|
505 | ||
506 | format_time_width_number = 1.0 |
|
507 | min_len_number = 1.0 |
|
508 | min_width_number = 11.0 # format_time_width_number * min_len_number + 4 and min_width_number > 11.0 |
|
509 | ||
510 | if period_type == 'hourly': |
|
511 | format_time_width_number = 4.0 |
|
512 | min_len_number = 2 |
|
513 | min_width_number = 12.0 |
|
514 | elif period_type == 'daily': |
|
515 | format_time_width_number = 2.5 |
|
516 | min_len_number = 4 |
|
517 | min_width_number = 14.0 |
|
518 | elif period_type == 'monthly': |
|
519 | format_time_width_number = 2.1 |
|
520 | min_len_number = 4 |
|
521 | min_width_number = 12.4 |
|
522 | elif period_type == 'yearly': |
|
523 | format_time_width_number = 1.5 |
|
524 | min_len_number = 5 |
|
525 | min_width_number = 11.5 |
|
526 | ||
527 | for i in range(0, ca_len): |
|
528 | bar = BarChart() |
|
529 | bar.title = \ |
|
530 | reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")" |
|
531 | labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number) |
|
532 | bar_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number, max_row=table_end_row_number) |
|
533 | bar.add_data(bar_data, titles_from_data=True) |
|
534 | bar.set_categories(labels) |
|
535 | bar.height = 5.25 |
|
536 | bar.width = format_time_width_number * len(time) if len(time) > min_len_number else min_width_number |
|
537 | bar.dLbls = DataLabelList() |
|
538 | bar.dLbls.showVal = True |
|
539 | bar.dLbls.showPercent = True |
|
540 | chart_col = 'B' |
|
541 | chart_cell = chart_col + str(chart_start_row_number) |
|
542 | chart_start_row_number += 5 |
|
543 | ws.add_chart(bar, chart_cell) |
|
544 | ||
545 | filename = str(uuid.uuid4()) + '.xlsx' |
|
546 | wb.save(filename) |