Esempio n. 1
0
def _export_sheet(data, sheet_scheme, scheme, ws):
    for i, field in enumerate(_get_headers_for_sheetscheme(sheet_scheme, scheme)):
        ws.write(0, i, field, HEADER_STYLE)


    for row, item_data in enumerate(Path.from_string(sheet_scheme["Path"]).get(data).values()):
        ws.write(row+1,0, item_data.name)
        for col, field in enumerate(sheet_scheme["Fields"]):
            field_path = _get_field_option(field, "Path") or field
            cell_data = Path.from_string(field_path).get(item_data)
            ws.write(row+1,col+1, cell_data.get())
Esempio n. 2
0
def _get_headers_for_sheetscheme(sheet_scheme, scheme):
    result = ["id"]
    for field in sheet_scheme["Fields"]:
        field_path = _get_field_option(field, "Path") or field
        field_path = field_path.replace("/", "/SubElements/")

        result.append(_get_field_option(field, "Name") or Path.from_string(sheet_scheme["Path"]+"/*/"+field_path).get(scheme)["Description"].get())
    return result
Esempio n. 3
0
def import_from_excel(scheme, filename):
    export_scheme = scheme.get_meta().dump()["ExcelScheme"]
    rb = xlrd.open_workbook(filename)
    result = StructuredNode({})
    for sheet_name, sheet_scheme in export_scheme["Sheets"].iteritems():
        sheet = _get_sheet_by_name(rb, sheet_name)
        for rownum in range(1,sheet.nrows):
            row = sheet.row_values(rownum)
            current_id = None
            for field, cell_data in zip([ID_FIELD] + sheet_scheme["Fields"], row):
                if field==ID_FIELD:
                    current_id = cell_data
                else:
                    field_path = _get_field_option(field, "Path") or field
                    full_field_path = "/{}/{}/{}".format(sheet_scheme["Path"], current_id, field_path)
                    full_scheme_field_path = "/{}/{}/{}".format(sheet_scheme["Path"], current_id, field_path.replace("/", "/SubElements/"))
                    path = Path.from_string(full_field_path)
                    field_scheme = Path.from_string(full_scheme_field_path).get(scheme)
                    path.set(result, NodeWidget.get_data_class(field_scheme)(cell_data))
    pprint(result)
    return result.dump()
            
            
Esempio n. 4
0
 def _get_options_from_scheme(cls, scheme, data):
     path = Path.from_string(scheme["OptionPath"].get())
     return [Node.create_node(name) for name in path.get(data).keys()]