-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreport_xlsx.py
47 lines (35 loc) · 1.33 KB
/
report_xlsx.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""
Script that exports to a single xlsx file all the data relevant to be sent to Google Cloud.
"""
import configparser
import datetime
import xlsxwriter
from nau import Reports
def xlsx_worksheet(data, worksheet):
row = 0
col = 0
for key in data[0]:
worksheet.write(row, col, key)
col += 1
row = + 1
for line in data:
col = 0
for value in line.values():
if isinstance(value, (datetime.datetime, datetime.date, datetime.time, datetime.timedelta)):
worksheet.write_datetime(row, col, value)
else:
worksheet.write(row, col, value)
col += 1
row += 1
def export_to_xlsx(config : configparser.ConfigParser, report:Reports):
file_name : str = config.get('xlsx', 'file', fallback='report.xlsx')
default_date_format : str = config.get('xlsx', 'default_date_format', fallback='yyyy-mm-dd')
workbook = xlsxwriter.Workbook(file_name, {'default_date_format': default_date_format})
sheets_to_export_keys = config.get('xlsx', 'export', fallback=','.join(report.available_sheets_to_export_keys())).split(',')
for sheet_key in sheets_to_export_keys:
sheets_results = report.sheets_data([sheet_key])
for sheet_title, sheet_result in sheets_results:
# xlsx supports max of 31 characters on sheet title
worksheet = workbook.add_worksheet(sheet_title[:31])
xlsx_worksheet(sheet_result, worksheet)
workbook.close()