Exemple #1
0
def SaveToLibre(filename, grid):
    numcols = grid.GetNumberCols()
    numrows = grid.GetNumberRows()
    book = ezodf.newdoc(doctype="ods", filename=filename)
    book.sheets += ezodf.Sheet('Data', size=(numrows + 10, numcols + 10))
    book.sheets += ezodf.Sheet('Meta', size=(20, numcols + 10))
    datasheet = book.sheets['Data']
    metasheet = book.sheets['Meta']
    metasheet[(0,0)].set_value("Name")
    metasheet[(1,0)].set_value("Alignment")
    metasheet[(2,0)].set_value("Label")
    metasheet[(3,0)].set_value("Measure")
    metasheet[(4,0)].set_value("Variable type")
    metasheet[(5,0)].set_value("Decimal places")
    metasheet[(6,0)].set_value("Missing values")
    for idxx in range(numcols):
        for idxy in range(numrows):
            val = grid.GetCellValue(idxy, idxx)
            datasheet[(idxy + 1, idxx)].set_value(val)
        label = grid.GetColLabelValue(idxx)
        meta = grid.meta[label]
        datasheet[(0, idxx)].set_value(meta['name'])
        metasheet[(0, idxx + 1)].set_value(meta['name'])
        metasheet[(1, idxx + 1)].set_value(meta['align'])
        metasheet[(2, idxx + 1)].set_value(meta['label'])
        metasheet[(3, idxx + 1)].set_value(meta['measure'])
        metasheet[(4, idxx + 1)].set_value(meta['ivdv'])
        metasheet[(5, idxx + 1)].set_value(meta[str('decplaces')])
        metasheet[(6, idxx + 1)].set_value(meta['missingvalues'])
    book.save()
Exemple #2
0
    def export_to_ods(self, filename, editor):
        from database.file_formats.exporter.monodi.ods import MonodiOdsConfig
        from ezodf import newdoc, Paragraph, Heading, Sheet
        ods = newdoc(doctype='ods', filename=filename)
        config = MonodiOdsConfig()
        sheet = ezodf.Sheet('Tabellenblatt1', size=(2, config.length))
        ods.sheets += sheet

        for x in config.entries:
            sheet[x.cell.get_entry()].set_value(x.value)
        sheet[''.join(
            [config.dict['Textinitium Editionseinheit'].cell.column,
             str(2)])].set_value(self.textinitium)
        sheet[''.join([config.dict['Startseite'].cell.column,
                       str(2)])].set_value(self.start.page_name)
        sheet[''.join([config.dict['Startzeile'].cell.column,
                       str(2)])].set_value(self.start.row)
        sheet[''.join([config.dict['Endseite'].cell.column,
                       str(2)])].set_value(self.end.page_name)
        sheet[''.join([config.dict['Endzeile'].cell.column,
                       str(2)])].set_value(self.end.row)
        sheet[''.join([config.dict['Editor'].cell.column,
                       str(2)])].set_value(str(editor))
        sheet[''.join([config.dict['Doc-Id\' (intern)'].cell.column,
                       str(2)])].set_value(self.monody_id)
        sheet[''.join([config.dict['Quellen-ID (intern)'].cell.column,
                       str(2)])].set_value('Editorenordner')
        bytes = ods.tobytes()

        return bytes
Exemple #3
0
def get_rib_sheet(glider_2d):
    row_num = glider_2d.shape.half_cell_num + 1
    sheet_name = "Rib Elements"
    sheet = ezodf.Sheet(name=sheet_name, size=(row_num + 1, 1))
    elems = glider_2d.elements

    for i in range(1, row_num + 1):
        sheet[i, 0].set_value(str(i))

    column = 1

    # holes
    for hole in elems["holes"]:
        sheet.append_columns(2)

        sheet[0, column].set_value("QUERLOCH")

        for rib_no in hole["ribs"]:
            sheet[rib_no + 1, column].set_value(hole["pos"])
            sheet[rib_no + 1, column + 1].set_value(hole["size"])

        column += 2

    # attachment points
    per_rib = [
        glider_2d.lineset.get_upper_nodes(rib_no)
        for rib_no in range(glider_2d.shape.half_rib_num)
    ]
    max_points = max([len(p) for p in per_rib])
    sheet.append_columns(3 * max_points)

    for node_no in range(max_points):
        sheet[0, column + 3 * node_no].set_value("AHP")

    for rib_no, nodes in enumerate(per_rib):
        nodes.sort(key=lambda node: node.rib_pos)
        for node_no, node in enumerate(nodes):
            sheet[rib_no + 1, column + 3 * node_no].set_value(node.name)
            sheet[rib_no + 1, column + 3 * node_no + 1].set_value(node.rib_pos)
            sheet[rib_no + 1, column + 3 * node_no + 2].set_value(node.force)
    column += 3 * max_points

    # rigidfoils
    rigidfoils = glider_2d.elements.get("rigidfoils", [])
    rigidfoils.sort(key=lambda r: r["start"])
    for rigidfoil in rigidfoils:
        sheet.append_columns(3)
        sheet[0, column].set_value("RIGIDFOIL")
        for rib_no in rigidfoil["ribs"]:
            sheet[rib_no + 1, column].set_value(rigidfoil["start"])
            sheet[rib_no + 1, column + 1].set_value(rigidfoil["end"])
            sheet[rib_no + 1, column + 2].set_value(rigidfoil["distance"])
        column += 3

    return sheet
Exemple #4
0
def get_airfoil_sheet(glider_2d):
    profiles = glider_2d.profiles
    max_length = max(len(p) for p in profiles)
    sheet = ezodf.Sheet(name="Airfoils",
                        size=(max_length + 1, len(profiles) * 2))

    for i, profile in enumerate(profiles):
        sheet[0, 2 * i].set_value(profile.name or "unnamed")
        for j, p in enumerate(profile):
            sheet[j + 1, 2 * i].set_value(p[0])
            sheet[j + 1, 2 * i + 1].set_value(p[1])

    return sheet
Exemple #5
0
def get_specs(glider):
    sheet = ezodf.Sheet("Tech Specs", size=(100, 10))

    def set_spec(name, value, line):
        sheet[line, 0].set_value(name)
        sheet[line, 1].set_value(value)

    #set_spec("Name", glider.name, 0)
    set_spec("Cells", len(glider.cells), 1)
    set_spec("Area", glider.area, 2)
    set_spec("Area Projected", glider.projected_area, 3)
    set_spec("Aspect Ratio", glider.aspect_ratio, 4)
    set_spec("Span", glider.span, 5)

    return sheet
Exemple #6
0
def get_geom_sheet(glider_2d):
    geom_page = ezodf.Sheet(name="geometry",
                            size=(glider_2d.shape.half_cell_num + 2, 10))

    # rib_nos
    geom_page[0, 0].set_value("Ribs")

    shape = glider_2d.shape.get_half_shape()

    geom_page[0, 1].set_value("Chord")
    for i, chord in enumerate(shape.chords):
        geom_page[i + 1, 1].set_value(chord)

    geom_page[0, 2].set_value("Le x (m)")
    geom_page[0, 3].set_value("Le y (m)")
    for i, p in enumerate(shape.front):
        geom_page[i + 1, 2].set_value(p[0])
        geom_page[i + 1, 3].set_value(-p[1])

    # set arc values
    geom_page[0, 4].set_value("Arc")
    last_angle = 0
    cell_angles = glider_2d.arc.get_cell_angles(glider_2d.shape.rib_x_values)
    if glider_2d.shape.has_center_cell:
        cell_angles = cell_angles[1:]
    for i, angle in enumerate(cell_angles + [cell_angles[-1]]):
        this_angle = angle * 180 / math.pi

        geom_page[i + 1, 4].set_value(this_angle - last_angle)
        last_angle = this_angle

    geom_page[0, 5].set_value("AOA")
    geom_page[0, 6].set_value("Z-rotation")
    geom_page[0, 7].set_value("Y-rotation")
    geom_page[0, 8].set_value("profile-merge")
    geom_page[0, 9].set_value("ballooning-merge")
    aoa_int = glider_2d.aoa.interpolation(num=100)
    profile_int = glider_2d.profile_merge_curve.interpolation(num=100)
    ballooning_int = glider_2d.ballooning_merge_curve.interpolation(num=100)
    for rib_no, x in enumerate(glider_2d.shape.rib_x_values):
        geom_page[rib_no + 1, 0].set_value(rib_no + 1)
        geom_page[rib_no + 1, 5].set_value(aoa_int(x) * 180 / math.pi)
        geom_page[rib_no + 1, 6].set_value(0)
        geom_page[rib_no + 1, 7].set_value(0)
        geom_page[rib_no + 1, 8].set_value(profile_int(x))
        geom_page[rib_no + 1, 9].set_value(ballooning_int(x))

    return geom_page
Exemple #7
0
def get_ballooning_sheet(glider_2d):
    balloonings = glider_2d.balloonings
    row_num = max([
        len(b.upper_spline.controlpoints) + len(b.lower_spline.controlpoints)
        for b in balloonings
    ]) + 1
    sheet = ezodf.Sheet(name="Balloonings",
                        size=(row_num, 2 * len(balloonings)))

    for ballooning_no, ballooning in enumerate(balloonings):
        #sheet.append_columns(2)
        sheet[0, 2 * ballooning_no].set_value(
            "ballooning_{}".format(ballooning_no))
        pts = list(ballooning.upper_spline.controlpoints) + list(
            ballooning.lower_spline.controlpoints)
        for i, point in enumerate(pts):
            sheet[i + 1, 2 * ballooning_no].set_value(point[0])
            sheet[i + 1, 2 * ballooning_no + 1].set_value(point[1])

    return sheet
Exemple #8
0
def get_data_sheet(glider):
    ods_sheet = ezodf.Sheet(name="Data", size=(3, 10))
    ods_sheet[0, 0].set_value("Data")
    current_row = 1
    # lower attachment_points
    for pt_no, att_pt in enumerate(
            glider.lineset.get_lower_attachment_points()):
        ods_sheet.append_rows(3)
        for i, axis in enumerate(['X', 'Y', 'Z']):
            ods_sheet[current_row + i,
                      0].set_value("AHP{}{}".format(axis, att_pt.name))
            ods_sheet[current_row + i, 1].set_value(att_pt.pos_3D[i])
        current_row += 3

    ods_sheet[current_row, 0].set_value("SPEED")
    ods_sheet[current_row, 1].set_value(glider.speed)

    ods_sheet[current_row + 1, 0].set_value("GLIDE")
    ods_sheet[current_row + 1, 1].set_value(glider.glide)

    return ods_sheet
Exemple #9
0
def get_parametric_sheet(glider):
    line_no = 1 + max([
        glider.shape.front_curve.numpoints, glider.shape.back_curve.numpoints,
        glider.shape.rib_distribution.numpoints, glider.arc.curve.numpoints
    ])
    sheet = ezodf.Sheet(name="Parametric", size=(line_no, 8))

    def add_curve(name, curve, column_no):
        #sheet.append_columns(2)
        sheet[0, column_no].set_value(name)
        for i, p in enumerate(curve):
            sheet[i + 1, column_no].set_value(p[0])
            sheet[i + 1, column_no + 1].set_value(p[1])

    add_curve("front", glider.shape.front_curve.controlpoints, 0)
    add_curve("back", glider.shape.back_curve.controlpoints, 2)
    add_curve("rib_distribution", glider.shape.rib_distribution.controlpoints,
              4)
    add_curve("arc", glider.arc.curve.controlpoints, 6)

    return sheet
Exemple #10
0
    def damp_timetable(self, filename):
        ''' Creates file in .ods format with selected name for timetable keeping. '''
        group_names = sorted([g.id for g in self.groups])
        week, hours = TimetablePlanner.WEEK, TimetablePlanner.HOURS + ['6th']
        time_slots = [(d, h) for d in week for h in hours]

        ods = ezodf.newdoc(doctype='ods', filename=filename)
        sheet = ezodf.Sheet('Timetable', size=(37, 6))
        ods.sheets += sheet

        coords = [str(r) + str(c) for r in 'ABCDEF' for c in range(2, 38)]
        headers = [c + '1' for c in 'ABCDEF']

        for header, name in zip(headers, group_names):
            sheet[header].set_value(name)
        start, end = 0, 36
        for g in sorted(self.groups, key=lambda x: x.id):
            for (coord, timeslot) in zip(coords[start:end], time_slots):
                if timeslot in g.busy_time:
                    sheet[coord].set_value(g.busy_time[timeslot][0])
            start, end = end, end + 36
        ods.save()
Exemple #11
0
    def export_documents_to_ods(documents: List[Document], filename, username):
        from database.file_formats.exporter.monodi.ods import MonodiOdsConfig
        from ezodf import newdoc, Paragraph, Heading, Sheet
        import ezodf
        ods = newdoc(doctype='ods', filename=filename)
        config = MonodiOdsConfig()
        sheet = ezodf.Sheet('Tabellenblatt1',
                            size=(len(documents) + 1, config.length))
        ods.sheets += sheet
        for x in config.entries:
            sheet[x.cell.get_entry()].set_value(x.value)
        for doc_ind, doc in enumerate(documents, start=2):
            sheet[''.join([
                config.dict['Textinitium Editionseinheit'].cell.column,
                str(doc_ind)
            ])].set_value(doc.textinitium)
            sheet[''.join(
                [config.dict['Startseite'].cell.column,
                 str(doc_ind)])].set_value(doc.start.page_name)
            sheet[''.join(
                [config.dict['Startzeile'].cell.column,
                 str(doc_ind)])].set_value(doc.start.row)
            sheet[''.join([config.dict['Endseite'].cell.column,
                           str(doc_ind)])].set_value(doc.end.page_name)
            sheet[''.join([config.dict['Endzeile'].cell.column,
                           str(doc_ind)])].set_value(doc.end.row)
            sheet[''.join([config.dict['Editor'].cell.column,
                           str(doc_ind)])].set_value(username)
            sheet[''.join(
                [config.dict['Doc-Id\' (intern)'].cell.column,
                 str(doc_ind)])].set_value(doc.monody_id)
            sheet[''.join(
                [config.dict['Quellen-ID (intern)'].cell.column,
                 str(doc_ind)])].set_value('Editorenordner')
        bytes = ods.tobytes()

        return bytes
Exemple #12
0
 def __init__(self, ods_book, ods_sheet, sheet_name, **keywords):
     self.ods_book = ods_book
     self.ods_sheet = ezodf.Sheet(sheet_name)
     self.current_row = 0
Exemple #13
0
 def set_sheet_name(self, name):
     self.native_sheet = ezodf.Sheet(name)
     self.current_row = 0
#!/usr/bin/env python
#coding:utf-8
# Purpose: example make_refshett.py
# Created: 05.02.2011
# Copyright (C) 2011, Manfred Moitzi
# License: MIT license
from __future__ import unicode_literals, print_function, division
__author__ = "mozman <*****@*****.**>"

import ezodf

NCOLS = 10
NROWS = 10

ods = ezodf.newdoc('ods', 'refsheet.ods')

sheet = ezodf.Sheet('REFS', size=(NROWS, NCOLS))
ods.sheets += sheet

for row in range(NROWS):
    for col in range(NCOLS):
        content = chr(ord('A') + col) + str(row + 1)
        sheet[row, col].set_value(content)

ods.save()
Exemple #15
0
#!/usr/bin/env python
#coding:utf-8
# Purpose: empty spreadsheet
# Created: 26.01.2011
# Copyright (C) 2011, Manfred Moitzi
# License: MIT license
from __future__ import unicode_literals, print_function, division
__author__ = "mozman <*****@*****.**>"

import ezodf

ods = ezodf.newdoc('ods', "empty_spreadsheet.ods")
for sheetname in ['SHEET1', 'SHEET2', 'SHEET3']:
    ods.sheets += ezodf.Sheet(name=sheetname, size=(20, 10))

ods.save()
#!/usr/bin/env python
#coding:utf-8
# Purpose: example spreadhet with formula
# Created: 06.02.2011
# Copyright (C) 2011, Manfred Moitzi
# License: MIT license
from __future__ import unicode_literals, print_function, division
__author__ = "mozman <*****@*****.**>"

import ezodf

ods = ezodf.newdoc('ods')

sheet = ezodf.Sheet('SUM Formula')
ods.sheets += sheet

for col in range(5):
    for row in range(10):
        sheet[row, col].set_value(col * 10. + row)

sheet['F9'].set_value("Summe:")
sheet['F10'].formula = 'of:=SUM([.A1:.E10])'
sheet['F1'].formula = 'of:=SUM([.A1];[.B1];[.C1];[.D1];[.E1])'
ods.saveas('sum_formula.ods')
Exemple #17
0
#!/usr/bin/env python
#coding:utf-8
# Purpose: simple spreadsheet
# Created: 26.01.2011
# Copyright (C) 2011, Manfred Moitzi
# License: MIT license
from __future__ import unicode_literals, print_function, division

__author__ = "mozman <*****@*****.**>"

import ezodf

ods = ezodf.newdoc('ods', "simple_spreadsheet.ods")

sheet = ezodf.Sheet('NUMBERS', size=(20, 10))
ods.sheets += sheet
for index in range(sheet.ncols()):
    sheet[5, index].set_value(index)
    sheet[index, 5].set_value(index)
    sheet[index, index].set_value(index, value_type='currency', currency='EUR')

sheet = ezodf.Sheet('TEXT', size=(20, 10))
ods.sheets += sheet
for column in range(sheet.ncols()):
    for row, cell in enumerate(sheet.column(column)):
        cell.set_value("Cell (%d, %d)" % (row, column))
ods.save()
Exemple #18
0
def generate_charts(csvfile, bridges):
    # Fill predefined ods file with collected data.
    # csvfile: the .csv file generated by the loopback_test application
    # bridges: list of targeted bridges
    global verbose

    info('\nGenerating charts...')
    # Build input CSV Files List (depends on target list)
    try:
        debug('Targeted bridge(s): {}'.format(bridges))
        debug('CSV File: {}'.format(csvfile))
        prefix = os.path.splitext(csvfile)[0]  # remove file extension
        debug('prefix: {}'.format(prefix))
        csvfiles = {'Aggregated': '{}_agg.csv'.format(prefix)}
        for i in range(len(bridges)):
            csvfiles[bridges[i]] = '{}_{}.csv'.format(prefix, bridges[i])
        debug('Input CSV files list: {}'.format(csvfiles))
    except Exception as e:
        err("Failed to build input CSV Files List!")
        if verbose:
            traceback.print_exc()
        raise e

    # Read input CSV Files to retrieve data
    try:
        csvfiledata = {}
        for k in csvfiles.keys():
            csvfiledata[k] = readCSVFile(csvfiles[k])
        alldata = readCSVFile(csvfile)
    except Exception as e:
        err("Failed to read input CSV Files!")
        debug('Key: {}. CSV File: {}'.format(k, csvfiles[k]))
        if verbose:
            traceback.print_exc()
        raise e

    # Clone charts spreadsheet from template, and open it
    try:
        odsfilename = '{}_charts.ods'.format(prefix)
        debug('.ods filename: {}'.format(odsfilename))
        shutil.copy(CHARTS_TEMPLATE, odsfilename)
        # Retrieve .ods file sheets
        spreadsheet = ezodf.opendoc(odsfilename)
        sheets = spreadsheet.sheets
    except Exception as e:
        err("Failed to clone charts spreadsheet from template!")
        if verbose:
            traceback.print_exc()
        # Save changes into file
        spreadsheet.save()
        raise e

    # Fill chart tables with respective data
    try:
        rowcount = len(csvfiledata['Aggregated'])
        colcount = len(csvfiledata['Aggregated'][0])
        debug('Row count: {}'.format(rowcount))
        debug('Column count: {}'.format(colcount))
        for r in range(1, rowcount):  # first row is .csv header
            for k in csvfiles.keys():
                src_row = csvfiledata[k][r]
                dest_row = r + 1  # +2 row offset in .ods file vs .csv
                for c in range(colcount):
                    dest_cell = sheets[k][dest_row, c]
                    if c < 4:
                        src_val = src_row[c]
                    else:
                        src_val = int(src_row[c])
                    dest_cell.set_value(src_val)
    except Exception as e:
        err("Failed to fill chart tables with respective data!")
        debug("Row: {}.  Key: {}. Col: {}. Data={}".format(
            r, k, c, src_row[c]))
        if verbose:
            traceback.print_exc()
        # Save changes into file
        spreadsheet.save()
        raise e

    # Remove unused sheets
    if len(csvfiles) != len(sheets):
        for s in sheets:
            if s.name != 'Aggregated' and s.name not in bridges:
                debug('Removing {} sheet (not used).'.format(s.name))
                del sheets[s.name]

    # Copy all data from csvfile into last sheet
    # NB: add to use this method (create a new sheet and fill it) because of
    # some weird issue. If the sheet was already completed (like the previous
    # ones), code would crash, reported list index to be out of range.
    try:
        rowcount = len(alldata)
        colcount = len(alldata[0])
        debug('All data Row count: {}'.format(rowcount))
        debug('All data Column count: {}'.format(colcount))
        sheets += ezodf.Sheet('Data')
        sheets['Data'].append_rows(rowcount)
        sheets['Data'].append_columns(colcount)
        for r in range(rowcount):
            for c in range(colcount):
                src_row = alldata[r]
                dest_cell = sheets['Data'][r, c]
                if (r == 0) or (c < 4):
                    src_val = src_row[c]
                else:
                    src_val = int(src_row[c])
                dest_cell.set_value(src_val)
    except Exception as e:
        err("Failed to copy all data from csvfile into last sheet!")
        debug("Row: {}. Col: {}. Data={}".format(r, c, src_row[c]))
        if verbose:
            traceback.print_exc()
        # Save changes into file
        spreadsheet.save()
        raise e

    # Save changes into file
    spreadsheet.save()
    info("Completed. Charts saved into:\n  {} file.".format(odsfilename))