Пример #1
0
 def colwidth(self, width):
     if width not in self._widthstyles:
         w = Style(name="W{}".format(width), family="table-column")
         w.addElement(TableColumnProperties(columnwidth=width))
         self.doc.automaticstyles.addElement(w)
         self._widthstyles[width] = w
     return self._widthstyles[width]
Пример #2
0
def generate_ods(data):
    """
    Generate a ODS file.
    :param data: list-like of dict with the data.
    :return:
    """
    doc = OpenDocumentSpreadsheet()
    table = Table()
    tr = TableRow()
    colautowidth = Style(name="co1", family="table-column")
    colautowidth.addElement(TableColumnProperties(useoptimalcolumnwidth=True))
    doc.automaticstyles.addElement(colautowidth)
    for column in data[0].keys():
        table.addElement(TableColumn(stylename=colautowidth))
        tc = TableCell(valuetype="string", value=column)
        tc.addElement(P(text=column))
        tr.addElement(tc)
    table.addElement(tr)
    for row in data:
        tr = TableRow()
        for column in row.keys():
            tc = TableCell(valuetype="string", value=row[column])
            tc.addElement(P(text=row[column]))
            tr.addElement(tc)
        table.addElement(tr)
    file = os.path.join(
        tempfile.gettempdir(),
        'SIGE' + datetime.now().strftime('%Y%m%d%H%M%S%f') + '.ods')
    doc.spreadsheet.addElement(table)
    print(doc.automaticstyles.childNodes[0].attributes)
    doc.save(file)
    return file
Пример #3
0
    def create_blank_ods_with_styles():
        """Create a dmutils.ods.SpreadSheet pre-configured with some default styles, ready for population with data
        appropriate for the subclass View. Modifications here (except adding styles) are likely breaking changes."""
        spreadsheet = ods.SpreadSheet()

        # Add the font we will use for the entire spreadsheet.
        spreadsheet.add_font(FontFace(name="Arial", fontfamily="Arial"))

        # Add some default styles for columns.
        spreadsheet.add_style("col-default", "table-column", (
            TableColumnProperties(breakbefore="auto"),
        ), parentstylename="Default")

        spreadsheet.add_style("col-wide", "table-column", (
            TableColumnProperties(columnwidth="150pt", breakbefore="auto"),
        ), parentstylename="Default")

        spreadsheet.add_style("col-extra-wide", "table-column", (
            TableColumnProperties(columnwidth="300pt", breakbefore="auto"),
        ), parentstylename="Default")

        # Add some default styles for rows.
        spreadsheet.add_style("row-default", "table-row", (
            TableRowProperties(breakbefore="auto", useoptimalrowheight="false"),
        ), parentstylename="Default")

        spreadsheet.add_style("row-tall", "table-row", (
            TableRowProperties(breakbefore="auto", rowheight="30pt", useoptimalrowheight="false"),
        ), parentstylename="Default")

        spreadsheet.add_style("row-tall-optimal", "table-row", (
            TableRowProperties(breakbefore="auto", rowheight="30pt", useoptimalrowheight="true"),
        ), parentstylename="Default")

        # Add some default styles for cells.
        spreadsheet.add_style("cell-default", "table-cell", (
            TableCellProperties(wrapoption="wrap", verticalalign="top"),
            TextProperties(fontfamily="Arial", fontnameasian="Arial", fontnamecomplex="Arial", fontsize="11pt"),
        ), parentstylename="Default")

        spreadsheet.add_style("cell-header", "table-cell", (
            TableCellProperties(wrapoption="wrap", verticalalign="top"),
            TextProperties(fontfamily="Arial", fontnameasian="Arial", fontnamecomplex="Arial", fontsize="11pt",
                           fontweight="bold"),
        ), parentstylename="Default")

        return spreadsheet
Пример #4
0
def init(LOdoc, numfonts=1):
    totalwid = 6800 #6.8inches

    #compute column widths
    f = min(numfonts,4)
    ashare = 4*(6-f)
    dshare = 2*(6-f)
    bshare = 100 - 2*ashare - dshare
    awid = totalwid * ashare // 100
    dwid = totalwid * dshare // 100
    bwid = totalwid * bshare // (numfonts * 100)

    # create styles for table, for columns (one style for each column width)
    # and for one cell (used for everywhere except where background changed)
    tstyle = Style(name="Table1", family="table")
    tstyle.addElement(TableProperties(attributes={'width':str(totalwid/1000.)+"in", 'align':"left"}))
    LOdoc.automaticstyles.addElement(tstyle)
    tastyle = Style(name="Table1.A", family="table-column")
    tastyle.addElement(TableColumnProperties(attributes={'columnwidth':str(awid/1000.)+"in"}))
    LOdoc.automaticstyles.addElement(tastyle)
    tbstyle = Style(name="Table1.B", family="table-column")
    tbstyle.addElement(TableColumnProperties(attributes={'columnwidth':str(bwid/1000.)+"in"}))
    LOdoc.automaticstyles.addElement(tbstyle)
    tdstyle = Style(name="Table1.D", family="table-column")
    tdstyle.addElement(TableColumnProperties(attributes={'columnwidth':str(dwid/1000.)+"in"}))
    LOdoc.automaticstyles.addElement(tdstyle)
    ta1style = Style(name="Table1.A1", family="table-cell")
    ta1style.addElement(TableCellProperties(attributes={'padding':"0.035in", 'border':"0.05pt solid #000000"}))
    LOdoc.automaticstyles.addElement(ta1style)
    # text style used with non-<em> text
    t1style = Style(name="T1", family="text")
    t1style.addElement(TextProperties(attributes={'color':"#999999" }))
    LOdoc.automaticstyles.addElement(t1style)
    # create styles for Title, Subtitle
    tstyle = Style(name="Title", family="paragraph")
    tstyle.addElement(TextProperties(attributes={'fontfamily':"Arial",'fontsize':"24pt",'fontweight':"bold" }))
    LOdoc.styles.addElement(tstyle)
    ststyle = Style(name="Subtitle", family="paragraph")
    ststyle.addElement(TextProperties(attributes={'fontfamily':"Arial",'fontsize':"18pt",'fontweight':"bold" }))
    LOdoc.styles.addElement(ststyle)
Пример #5
0
    def __init__(self):
        self.doc = OpenDocumentSpreadsheet()
        #styles
        self.itemRowStyle1 = Style(name="itemRowStyle", family="table-row")
        self.itemRowStyle1.addElement(TableRowProperties(rowheight="7mm"))
        self.doc.automaticstyles.addElement(self.itemRowStyle1)

        self.itemRowStyle3 = Style(name="itemRowStyle", family="table-row")
        self.itemRowStyle3.addElement(TableRowProperties(rowheight="30mm"))
        self.doc.automaticstyles.addElement(self.itemRowStyle3)

        self.colStyle30 = Style(name="colStyle30", family="table-column")
        self.colStyle30.addElement(TableColumnProperties(columnwidth="25mm"))
        self.doc.automaticstyles.addElement(self.colStyle30)

        self.colStyle40 = Style(name="colStyle40", family="table-column")
        self.colStyle40.addElement(TableColumnProperties(columnwidth="40mm"))
        self.doc.automaticstyles.addElement(self.colStyle40)

        self.colStyle50 = Style(name="colStyle50", family="table-column")
        self.colStyle50.addElement(TableColumnProperties(columnwidth="50mm"))
        self.doc.automaticstyles.addElement(self.colStyle50)

        self.colStyle200 = Style(name="colStyle200", family="table-column")
        self.colStyle200.addElement(TableColumnProperties(columnwidth="200mm"))
        self.doc.automaticstyles.addElement(self.colStyle200)


        self.cellStyle1 = Style(name="cellStyle1",family="table-cell", parentstylename='Standard', displayname="middle")
        self.cellStyle1.addElement(ParagraphProperties(textalign="center"))
        self.cellStyle1.addElement(TableCellProperties(verticalalign="middle"))
        self.cellStyle1.addElement(TableCellProperties(wrapoption="wrap"))
        self.doc.automaticstyles.addElement(self.cellStyle1)

        self.hdrStyle = Style(name="hdrStyle",family="table-cell", parentstylename='Standard', displayname="middle")
        self.hdrStyle.addElement(ParagraphProperties(textalign="center"))
        self.hdrStyle.addElement(TextProperties(fontweight="bold"))
        self.hdrStyle.addElement(TableCellProperties(verticalalign="middle"))
        self.doc.automaticstyles.addElement(self.hdrStyle)
Пример #6
0
def inittable(textdoc):
    # Create a style for the table content. One we can modify
    # later in the word processor.
    tablecontents = Style(name="Table Contents", family="paragraph")
    tablecontents.addElement(
        ParagraphProperties(numberlines="false", linenumber="0"))
    tablecontents.addElement(TextProperties(fontweight="bold"))
    textdoc.styles.addElement(tablecontents)
    widewidth = Style(name="co1", family="table-column")
    widewidth.addElement(
        TableColumnProperties(columnwidth="9", breakbefore="auto"))
    textdoc.automaticstyles.addElement(widewidth)
    textdoc.styles.addElement(widewidth)
    table = Table(name='test')
    table.addElement(
        TableColumn(stylename=widewidth, defaultcellstylename="ce1"))
    return table, tablecontents, textdoc
Пример #7
0
PWENC = "utf-8"

textdoc = OpenDocumentText()
# Create a style for the table content. One we can modify
# later in the word processor.
tablecontents = Style(name="Table Contents", family="paragraph")
tablecontents.addElement(
    ParagraphProperties(numberlines="false", linenumber="0"))
textdoc.styles.addElement(tablecontents)

# Create automatic styles for the column widths.
# We want two different widths, one in inches, the other one in metric.
# ODF Standard section 15.9.1
widthshort = Style(name="Wshort", family="table-column")
widthshort.addElement(TableColumnProperties(columnwidth="1.7cm"))
textdoc.automaticstyles.addElement(widthshort)

widthwide = Style(name="Wwide", family="table-column")
widthwide.addElement(TableColumnProperties(columnwidth="1.5in"))
textdoc.automaticstyles.addElement(widthwide)

# Start the table, and describe the columns
table = Table()
table.addElement(TableColumn(numbercolumnsrepeated=4, stylename=widthshort))
table.addElement(TableColumn(numbercolumnsrepeated=3, stylename=widthwide))

f = open('/etc/passwd')
for line in f:
    rec = line.strip().split(":")
    tr = TableRow()
Пример #8
0
    def insert_table_(self, ar, column_names=None, table_width=180):
        # logger.info("20160330 insert_table(%s)", ar)
        ar.setup_from(self.ar)
        columns, headers, widths = ar.get_field_info(column_names)
        widths = map(int, widths)
        tw = sum(widths)
        # specifying relative widths doesn't seem to work (and that's
        # a pity because absolute widths requires us to know the
        # table_width).
        use_relative_widths = False
        if use_relative_widths:
            width_specs = ["%d*" % (w * 100 / tw) for w in widths]
        else:
            width_specs = ["%dmm" % (table_width * w / tw) for w in widths]

        doc = OpenDocumentText()

        def add_style(**kw):
            st = Style(**cleankw(kw))
            doc.styles.addElement(st)
            self.my_styles.append(st)
            return st

        table_style_name = str(ar.actor)
        st = add_style(name=table_style_name, family="table",
                       parentstylename="Default")
        st.addElement(
            TableProperties(align="margins", maybreakbetweenrows="0"))

        # create some *visible* styles

        st = add_style(name="Table Contents", family="paragraph",
                       parentstylename="Default")
        st.addElement(ParagraphProperties(numberlines="false",
                                          linenumber="0"))

        st = add_style(name="Number Cell", family="paragraph",
                       parentstylename="Table Contents")
        st.addElement(ParagraphProperties(
            numberlines="false",
            textalign="end", justifysingleword="true",
            linenumber="0"))

        dn = "Table Column Header"
        st = self.stylesManager.styles.getStyle(dn)
        if st is None:
            st = add_style(name=dn, family="paragraph",
                           parentstylename="Table Contents")
            st.addElement(
                ParagraphProperties(numberlines="false", linenumber="0"))
            st.addElement(TextProperties(fontweight="bold"))

        dn = "Bold Text"
        st = self.stylesManager.styles.getStyle(dn)
        if st is None:
            st = add_style(name=dn, family="text", parentstylename="Default")
            #~ st = add_style(name=dn, family="text")
            st.addElement(TextProperties(fontweight="bold"))

        if False:
            dn = "L1"
            st = self.stylesManager.styles.getStyle(dn)
            if st is None:
                st = ListStyle(name=dn)
                doc.styles.addElement(st)
                p = ListLevelProperties(
                    listlevelpositionandspacemode="label-alignment")
                st.addElement(p)
                #~ label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-0.635cm" fo:margin-left="1.27cm"/>
                p.addElement(ListLevelLabelAlignment(labelfollowedby="listtab",
                                                     listtabstopposition="1.27cm",
                                                     textindent="-0.635cm",
                                                     marginleft="1.27cm"
                                                     ))
                self.my_styles.append(st)

                #~ list_style = add_style(name=dn, family="list")
                bullet = text.ListLevelStyleBullet(
                    level=1, stylename="Bullet_20_Symbols", bulletchar=u"•")
                #~ bullet = text.ListLevelStyleBullet(level=1,stylename="Bullet_20_Symbols",bulletchar=u"*")
                #~ <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" text:bullet-char="•">
                st.addElement(bullet)

        # create some automatic styles

        def add_style(**kw):
            st = Style(**cleankw(kw))
            doc.automaticstyles.addElement(st)
            self.my_automaticstyles.append(st)
            return st

        cell_style = add_style(name="Lino Cell Style", family="table-cell")
        cell_style.addElement(TableCellProperties(
            paddingleft="1mm", paddingright="1mm",
            paddingtop="1mm", paddingbottom="0.5mm",
            border="0.002cm solid #000000"))

        header_row_style = add_style(
            name="Lino Header Row", family="table-row",
            parentstylename=cell_style)
        header_row_style.addElement(
            TableRowProperties(backgroundcolor="#eeeeee"))

        total_row_style = add_style(
            name="Lino Total Row", family="table-row",
            parentstylename=cell_style)
        total_row_style.addElement(
            TableRowProperties(backgroundcolor="#ffffff"))

        table = Table(name=table_style_name, stylename=table_style_name)
        table_columns = TableColumns()
        table.addElement(table_columns)
        table_header_rows = TableHeaderRows()
        table.addElement(table_header_rows)
        table_rows = TableRows()
        table.addElement(table_rows)

        # create table columns and automatic table-column styles
        for i, fld in enumerate(columns):
            #~ print 20120415, repr(fld.name)
            name = str(ar.actor) + "." + str(fld.name)
            cs = add_style(name=name, family="table-column")
            if use_relative_widths:
                cs.addElement(
                    TableColumnProperties(relcolumnwidth=width_specs[i]))
            else:
                cs.addElement(
                    TableColumnProperties(columnwidth=width_specs[i]))
            #~ cs.addElement(TableColumnProperties(useoptimalcolumnwidth='true'))
            #~ k = cs.getAttribute('name')
            #~ renderer.stylesManager.styles[k] = toxml(e)
            #~ doc.automaticstyles.addElement(cs)
            #~ self.my_automaticstyles.append(cs)
            table_columns.addElement(TableColumn(stylename=name))

        def fldstyle(fld):
            #~ if isinstance(fld,ext_store.VirtStoreField):
                #~ fld = fld.delegate
            if isinstance(fld, NumberFieldElement):
                return "Number Cell"
            return "Table Contents"

        def value2cell(ar, i, fld, val, style_name, tc):
            # if i == 0:
            #     logger.info("20160330a value2cell(%s, %s)", fld.__class__, val)
            txt = fld.value2html(ar, val)
            # if i == 0:
            #     logger.info("20160330b value2cell(%s)", E.tostring(txt))

            p = text.P(stylename=style_name)
            html2odf(txt, p)

            try:
                tc.addElement(p)
            except Exception as e:
                dd.logger.warning("20120614 addElement %s %s %r : %s",
                                  i, fld, val, e)
                #~ print 20120614, i, fld, val, e

            #~ yield P(stylename=tablecontents,text=text)

        # create header row
        #~ hr = TableRow(stylename=HEADER_ROW_STYLE_NAME)
        hr = TableRow(stylename=header_row_style)
        table_header_rows.addElement(hr)
        for h in headers:
        #~ for fld in fields:
            #~ tc = TableCell(stylename=CELL_STYLE_NAME)
            tc = TableCell(stylename=cell_style)
            tc.addElement(text.P(
                stylename="Table Column Header",
                #~ text=force_text(fld.field.verbose_name or fld.name)))
                text=force_text(h)))
            hr.addElement(tc)

        sums = [fld.zero for fld in columns]

        for row in ar.data_iterator:
            #~ for grp in ar.group_headers(row):
                #~ raise NotImplementedError()
            tr = TableRow()

            has_numeric_value = False

            for i, fld in enumerate(columns):

                #~ tc = TableCell(stylename=CELL_STYLE_NAME)
                tc = TableCell(stylename=cell_style)
                #~ if fld.field is not None:
                v = fld.field._lino_atomizer.full_value_from_object(row, ar)
                stylename = fldstyle(fld)
                if v is None:
                    tc.addElement(text.P(stylename=stylename, text=''))
                else:
                    value2cell(ar, i, fld, v, stylename, tc)

                    nv = fld.value2num(v)
                    if nv != 0:
                        sums[i] += nv
                        has_numeric_value = True
                    #~ sums[i] += fld.value2num(v)
                tr.addElement(tc)

            if has_numeric_value or not ar.actor.hide_zero_rows:
                table_rows.addElement(tr)

        if not ar.actor.hide_sums:
            if sums != [fld.zero for fld in columns]:
                tr = TableRow(stylename=total_row_style)
                table_rows.addElement(tr)
                sums = {fld.name: sums[i] for i, fld in enumerate(columns)}
                for i, fld in enumerate(columns):
                    tc = TableCell(stylename=cell_style)
                    stylename = fldstyle(fld)
                    p = text.P(stylename=stylename)
                    e = fld.format_sum(ar, sums, i)
                    html2odf(e, p)
                    tc.addElement(p)
                    #~ if len(txt) != 0:
                        #~ msg = "html2odf() returned "
                        #~ logger.warning(msg)
                    #~ txt = tuple(html2odf(fld.format_sum(ar,sums,i),p))
                    #~ assert len(txt) == 1
                    #~ tc.addElement(text.P(stylename=stylename,text=txt[0]))
                    tr.addElement(tc)

        doc.text.addElement(table)
        return toxml(table)
Пример #9
0
def create_doc_with_styles():
    textdoc = OpenDocumentSpreadsheet()

    # Create automatic styles for the column widths.
    # ODF Standard section 15.9.1
    nameColStyle = Style(name="nameColStyle", family="table-column")
    nameColStyle.addElement(TableColumnProperties(columnwidth="8cm"))
    textdoc.automaticstyles.addElement(nameColStyle)

    tagColStyle = Style(name="tagColStyle", family="table-column")
    tagColStyle.addElement(TableColumnProperties(columnwidth="5cm"))
    tagColStyle.addElement(ParagraphProperties(textalign="left"))  #??
    textdoc.automaticstyles.addElement(tagColStyle)

    rankColStyle = Style(name="rankColStyle", family="table-column")
    rankColStyle.addElement(TableColumnProperties(columnwidth="1.5cm"))
    rankColStyle.addElement(ParagraphProperties(textalign="center"))  #??
    textdoc.automaticstyles.addElement(rankColStyle)

    valColStyle = Style(name="valColStyle", family="table-column")
    valColStyle.addElement(TableColumnProperties(columnwidth="0.9cm"))
    valColStyle.addElement(ParagraphProperties(textalign="center"))  #??
    textdoc.automaticstyles.addElement(valColStyle)

    linkColStyle = Style(name="linkColStyle", family="table-column")
    linkColStyle.addElement(TableColumnProperties(columnwidth="0.3cm"))
    linkColStyle.addElement(ParagraphProperties(textalign="center"))  #??
    textdoc.automaticstyles.addElement(linkColStyle)

    # Create a style for the table content. One we can modify
    # later in the word processor.
    tablecontents = Style(name="tablecontents", family="paragraph")
    tablecontents.addElement(
        ParagraphProperties(numberlines="false", linenumber="0"))
    tablecontents.addElement(TextProperties(fontweight="bold"))
    textdoc.styles.addElement(tablecontents)

    TH = Style(name="THstyle",
               family="table-cell",
               parentstylename='Standard',
               displayname="Table Header")
    TH.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(TH)

    C0 = Style(name="C0style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 0")
    C0.addElement(TableCellProperties(backgroundcolor="#00FF00"))
    C0.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C0)

    Csep = Style(name="Csepstyle",
                 family="table-cell",
                 parentstylename='Standard',
                 displayname="Color style Sep ")
    Csep.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(Csep)

    C1 = Style(name="C1style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 1")
    C1.addElement(TableCellProperties(backgroundcolor="#00FF00"))
    C1.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C1)

    C2 = Style(name="C2style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 2")
    C2.addElement(TableCellProperties(backgroundcolor="#FFFF00"))
    C2.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C2)

    C3 = Style(name="C3style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 3")
    C3.addElement(TableCellProperties(backgroundcolor="#FFAA00"))
    C3.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C3)

    C4 = Style(name="C4style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 4")
    C4.addElement(TableCellProperties(backgroundcolor="#FF0000"))
    C4.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C4)

    C5 = Style(name="C5style",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style 5")
    C5.addElement(TableCellProperties(backgroundcolor="#FF0000"))
    C5.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(C5)

    CB = Style(name="CBstyle",
               family="table-cell",
               parentstylename='Standard',
               displayname="Color style blue")
    CB.addElement(TableCellProperties(backgroundcolor="#8888DD"))
    CB.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(CB)

    rankCellStyle = Style(name="rankCellStyle",
                          family="table-cell",
                          parentstylename='Standard',
                          displayname="rankCellStyle")
    rankCellStyle.addElement(ParagraphProperties(textalign="center"))
    textdoc.styles.addElement(rankCellStyle)

    return textdoc
Пример #10
0
def generate_odf_plan_document(plan_pk, file_path):
    # Neues Textdokument erstellen
    document = OpenDocumentText()

    #
    # Styles definieren
    #
    center_bold = Style(name="Center Bold", family="paragraph")
    center_bold.addElement(ParagraphProperties(textalign="center"))
    center_bold.addElement(TextProperties(fontweight="bold"))
    document.styles.addElement(center_bold)

    center = Style(name="Center", family="paragraph")
    center.addElement(ParagraphProperties(textalign="center"))
    document.styles.addElement(center)

    left = Style(name="Left", family="paragraph")
    left.addElement(ParagraphProperties(numberlines="false", linenumber="0", textalign="left"))
    document.styles.addElement(left)

    bold_style = Style(name="Bold", family="text")
    bold_style.addElement(TextProperties(fontweight="bold"))
    document.styles.addElement(bold_style)

    #
    # Breite der Spaleten in den Tabellen setzen
    #
    width_short = Style(name="Wshort", family="table-column")
    width_short.addElement(TableColumnProperties(columnwidth="3.0cm"))
    document.automaticstyles.addElement(width_short)

    width_medium = Style(name="Wmedium", family="table-column")
    width_medium.addElement(TableColumnProperties(columnwidth="4.0cm"))
    document.automaticstyles.addElement(width_medium)

    width_wide = Style(name="Wwide", family="table-column")
    width_wide.addElement(TableColumnProperties(columnwidth="10.59cm"))
    document.automaticstyles.addElement(width_wide)

    # Tabelle mit zwei schmalen und einer breiten Spalte erstellen
    table = Table()
    table.addElement(TableColumn(numbercolumnsrepeated=1, stylename=width_short))
    table.addElement(TableColumn(numbercolumnsrepeated=1, stylename=width_medium))
    table.addElement(TableColumn(numbercolumnsrepeated=1, stylename=width_wide))

    # Generiert eine Zeile in der Tabelle
    def generate_row(datetime, location, extra, acolytes):

        # Datum und Uhrzeit formatieren
        date_string = datetime.strftime("%d.%m.%Y")
        time_string = datetime.strftime("%H:%M")

        # Neue TableRow erstellen und einfügen
        row = TableRow()
        table.addElement(row)

        # Datum - Zeit Zelle anlegen
        date_time_cell = TableCell()
        date_time_cell.addElement(P(stylename=center, text=date_string))
        date_time_cell.addElement(P(stylename=center_bold, text=time_string))

        # Ort - Information Zelle anlegen
        location_extra_cell = TableCell()
        location_extra_cell.addElement(P(stylename=center_bold, text=location))
        location_extra_cell.addElement(P(stylename=center, text=extra))

        # Messdiener Zelle anlegen
        acolytes_cell = TableCell()

        # Messdiener nach Rolle sortiert auflisten
        for role_name in acolytes:
            p = P(stylename=left)
            p.addElement(Span(stylename=bold_style, text=f"{role_name}: "))
            p.addText(text=', '.join(acolytes[role_name]))
            acolytes_cell.addElement(p)

        # Zellen zur TableRow hinzufügen
        row.addElement(date_time_cell)
        row.addElement(location_extra_cell)
        row.addElement(acolytes_cell)

        # TableRow zurückgeben
        return row

    # Durch die Messen nach Zeit sortiert iterieren
    for mass in Mass.objects.filter(plan=plan_pk).order_by('time'):
        # Acolyte dict mit einer leeren Liste als default value anlegen
        acolytes_list = defaultdict(list)

        # Durch die MassAcolyteRoles nach Rolle sortiert iterieren
        for mar in mass.massacolyterole_set.order_by('role__roleName'):
            # Wenn Messdiener keine Rolle hat "Messdiener" als Rolle eintragen
            role = "Messdiener"

            # Wenn Messdiener Rolle hat, dann zur Liste der Messdiener dieser Rolle hinzufügen
            if mar.role is not None:
                role = mar.role.roleName

            # Acolyte Namen setzen. Wenn extra Wert hat, dann in Klammern dahinter setzen
            acolyte_name = f"{mar.acolyte.firstName} {mar.acolyte.lastName}"

            if mar.acolyte.extra:
                acolyte_name = f"{mar.acolyte.firstName} {mar.acolyte.lastName} ({mar.acolyte.extra})"

            acolytes_list[role].append(acolyte_name)

        # Zeit der Messe zur lokalen Zeit konvertieren
        utc = mass.time.replace(tzinfo=pytz.UTC)
        localtime = utc.astimezone(timezone.get_current_timezone())

        # Row generieren und zur Tabelle hinzufügen
        table.addElement(generate_row(
            localtime,
            mass.location.locationName,
            mass.extra,
            acolytes_list
        ))

        # Leere Row für die Übersicht einfügen
        table.addElement(TableRow())

    # Tabelle zum Dokument hinzufügen
    document.text.addElement(table)

    # Dokument speichern
    document.save(file_path)
Пример #11
0
	def save(self, filename, i_max = None, j_max = None):
		''' save table in ods format '''
		
		if not i_max: i_max = self.table.i_max
		if not j_max: j_max = self.table.j_max
		
		# update cells text
		self.table.updateTable(i_max, j_max)
		
		# create new odf spreadsheet
		odfdoc = OpenDocumentSpreadsheet()
		
		# set direction style
		rtl = Style(name = "dir", family = "table")
		if self.table.direction == 'rtl':
			rtl.addElement(TableProperties(writingmode="rl-tb"))
		odfdoc.automaticstyles.addElement(rtl)
		
		# create the table
		table = Table(name = "sheet 1", stylename = 'dir')
		
		# default style
		ts = Style(name = "ts", family = "table-cell")
		ts.addElement(TextProperties(fontfamily = SodsCell().font_family, fontsize = SodsCell().font_size))
		odfdoc.styles.addElement(ts)
		
		# create columns
		for j in range(1, j_max):
			colname = "col" + str(j)
			c = self.table.getCellAt(0, j)
			width = c.column_width
			cs = Style(name = colname, family = "table-column")
			cs.addElement(TableColumnProperties(columnwidth = width, breakbefore = "auto"))
			odfdoc.automaticstyles.addElement(cs)

			table.addElement(TableColumn(stylename = colname, defaultcellstylename = "ts"))
			
		# make sure values are up to date
		# loop and update the cells value
		for i in range(1, i_max):
			# create new ods row
			tr = TableRow()
			table.addElement(tr)
			
			# create default data styles for dates and numbers
			ncs = NumberStyle(name="ncs")
			ncs.addElement(Number(decimalplaces="2", minintegerdigits="1", grouping="true"))
			odfdoc.styles.addElement(ncs)
			
			ncs2 = NumberStyle(name="ncs2")
			ncs2.addElement(Number(decimalplaces="0", minintegerdigits="1", grouping="false"))
			odfdoc.styles.addElement(ncs2)
			
			dcs = DateStyle(name="dcs")
			dcs.addElement(Year(style='long'))
			dcs.addElement(Text(text = '-'))
			dcs.addElement(Month(style='long'))
			dcs.addElement(Text(text = '-'))
			dcs.addElement(Day(style='long'))
			odfdoc.styles.addElement(dcs)
			
			for j in range(1, j_max):
				# update the cell text and condition
				cell = self.table.encodeColName(j) + str(i)
				c = self.table.getCellAt(i, j)
				
				# chose datastylename
				if c.value_type == 'date':
					datastylename = "dcs"
				else:
					if c.format == "":
						datastylename = "ncs2"
					if c.format == "#,##0.00":
						datastylename = "ncs"
					
				# get cell style id
				if (c.condition):
					style_id = (datastylename + c.color + c.font_size + c.font_family + 
						c.background_color + c.border_top + c.border_bottom + 
						c.border_left + c.border_right + 
						c.condition_color + c.condition_background_color)
				else:
					style_id = (datastylename + c.color + c.font_size + c.font_family + 
						c.background_color + c.border_top + c.border_bottom + 
						c.border_left + c.border_right)
				
				# set ods style
				style_name = self.getStyle(c, cell, datastylename, style_id, odfdoc)
				
				# create new ods cell
				if (c.formula and c.formula[0] == '=' and c.formula[:4] != '=uni'):
					if self.table.isFloat(c.value):
						tc = TableCell(valuetype = c.value_type, 
							formula = c.formula, value = float(c.value), stylename = style_name)
					else:
						tc = TableCell(valuetype = c.value_type, 
							formula = c.formula, 
							value = 0, stylename = style_name)
				elif (c.value_type == 'date'):
					tc = TableCell(valuetype = c.value_type, 
						datevalue = c.date_value, stylename = style_name)
				elif (c.value_type == 'float') and self.table.isFloat(c.value):
					tc = TableCell(valuetype = c.value_type, 
						value = float(c.value), stylename = style_name)
				else:
					tc = TableCell(valuetype = 'string', stylename = style_name)
				
				# set ods text
				tc.addElement(P(text = str(escape(c.text), 'utf-8')))
				
				tr.addElement(tc)

		odfdoc.spreadsheet.addElement(table)
		odfdoc.save(filename)
Пример #12
0
    tr.addElement(tc)
    tc.addElement(text.P(text=input_text,stylename=style))

textdoc = load("my_template.odt")

header1 = textdoc.getStyleByName('主標題')
header2 = textdoc.getStyleByName('子標題')
normal_style = textdoc.getStyleByName('本文')
bold_style = textdoc.getStyleByName('強調')
center = textdoc.getStyleByName('置中本文')
centerbold = textdoc.getStyleByName('置中粗體')
center_huge = textdoc.getStyleByName('置中加大')
ver_center = textdoc.getStyleByName('垂直置中')

tbc2 = Style(name="tbc2", family="table-column", parentstylename=normal_style)
tbc2.addElement(TableColumnProperties(columnwidth="2cm"))
textdoc.automaticstyles.addElement(tbc2)
tbc5 = Style(name="tbc5", family="table-column", parentstylename=normal_style)
tbc5.addElement(TableColumnProperties(columnwidth="5cm"))
textdoc.automaticstyles.addElement(tbc5)

mmTable = Table()
mmTable.addElement(TableColumn(defaultcellstylename=ver_center,numbercolumnsrepeated=1,stylename=tbc2))
mmTable.addElement(TableColumn(defaultcellstylename=ver_center,numbercolumnsrepeated=1,stylename=tbc5))
mmTable.addElement(TableColumn(defaultcellstylename=ver_center,numbercolumnsrepeated=1,stylename=tbc2))
mmTable.addElement(TableColumn(defaultcellstylename=ver_center,numbercolumnsrepeated=1,stylename=tbc5))
tr = TableRow()
mmTable.addElement(tr)
put_tc("會議時間",center,tr)
put_tc('2020/4/28',ver_center,tr,3)
tr = TableRow()
Пример #13
0
'''

output = OpenDocumentSpreadsheet()

middle_center = Style(name="middle_center", family="table-cell")
middle_center.addElement(TableCellProperties(verticalalign="middle"))
middle_center.addElement(ParagraphProperties(textalign="center"))
output.styles.addElement(middle_center)

middle_left = Style(name="middle_left", family="table-cell")
middle_left.addElement(TableCellProperties(verticalalign="middle"))
middle_left.addElement(ParagraphProperties(textalign="left"))
output.styles.addElement(middle_left)

date_style = Style(name="date", family="table-column")
date_style.addElement(TableColumnProperties(columnwidth="5cm"))
output.automaticstyles.addElement(date_style)

time_style = Style(name="time", family="table-column")
time_style.addElement(TableColumnProperties(columnwidth="1.5cm"))
output.automaticstyles.addElement(time_style)

examinee_style = Style(name="examinee", family="table-column")
examinee_style.addElement(TableColumnProperties(columnwidth="7cm"))
output.automaticstyles.addElement(examinee_style)

examiner_style = Style(name="examiner", family="table-column")
examiner_style.addElement(TableColumnProperties(columnwidth="4cm"))
output.automaticstyles.addElement(examiner_style)

table = Table()
Пример #14
0
def save(telephoneDir,
         subdivision=0,
         collaborator=None,
         number=None,
         telephoneType=None):
    collaborators = list(sorted(telephoneDir.subdivision))
    subdivisions = list(sorted(telephoneDir.subdivision.iterSubdivision()))
    telephoneTypes = list(sorted(telephoneDir.telephones.telephoneTypes))

    s = subdivisions[subdivision]
    lambdaSubdivision = lambda rec: rec.collaborator in s

    if not collaborator:
        lambdaCollaborator = lambda rec: True
    else:
        l = len(collaborator)
        lambdaCollaborator = lambda rec: str(rec.collaborator)[
            0:l] == collaborator

    if not number:
        lambdaNumber = lambda rec: True
    else:
        l = len(number)
        lambdaNumber = lambda rec: str(rec.telephone.number)[0:l] == number

    if not telephoneType:
        lambdaTelephoneType = lambda rec: True
    else:
        t = telephoneTypes[telephoneType]
        lambdaTelephoneType = lambda rec: rec.telephone.type == t

        root = Template(file=os.path.join(os.curdir, 'index.tmpl'))

    telephoneDir = filter(lambda telephone: lambdaSubdivision(telephone) and \
                                            lambdaCollaborator(telephone) and \
                                            lambdaNumber(telephone) and \
                                            lambdaTelephoneType(telephone), sorted(telephoneDir))

    textdoc = OpenDocumentText()

    tablecontents = Style(name="Table Contents", family="paragraph")
    tablecontents.addElement(
        ParagraphProperties(numberlines="false", linenumber="0"))
    textdoc.styles.addElement(tablecontents)

    textdoc.text.addElement(
        P(stylename=tablecontents, text=s.name.decode("utf-8")))

    style2 = Style(name="style2", family="table-column")
    style2.addElement(TableColumnProperties(columnwidth="2cm"))
    textdoc.automaticstyles.addElement(style2)

    table = Table(name=u"Телефонный справочник")
    table.addElement(TableColumn(numbercolumnsrepeated=3, stylename=style2))

    def row(rec):
        tr = TableRow()
        table.addElement(tr)
        for r in rec:
            tc = TableCell()
            tr.addElement(tc)
            p = P(stylename=tablecontents, text=r)
            tc.addElement(p)

    for rec in telephoneDir:
        row((str(rec.collaborator).decode("utf-8"), rec.telephone.number,
             rec.telephone.type.name.decode("utf-8")))

    textdoc.text.addElement(table)
    textdoc.save("telephonedir.odt")
Пример #15
0
	def get(self, request, queryset, annee=None):
		creneaux_ods = OpenDocumentSpreadsheet()

		# Styles
		style_entete = Style(parent=creneaux_ods.automaticstyles,
				name='cell_entete', family='table-cell')
		TextProperties(parent=style_entete, fontweight='bold')
		style_col_colleur = Style(parent=creneaux_ods.automaticstyles,
				name='col_colleur', family='table-column')
		TableColumnProperties(parent=style_col_colleur, columnwidth='5cm')
		style_col_matiere = Style(parent=creneaux_ods.automaticstyles,
				name='col_matiere', family='table-column')
		TableColumnProperties(parent=style_col_matiere, columnwidth='5cm')
		style_col_standard = Style(parent=creneaux_ods.automaticstyles,
				name='col_standard', family='table-column')
		TableColumnProperties(parent=style_col_standard, columnwidth='2cm')

		table = Table(name="Créneaux de colles",
				parent=creneaux_ods.spreadsheet)

		# Définition des colonnes
		table.addElement(TableColumn(stylename=style_col_colleur)) # Colleur
		table.addElement(TableColumn(stylename=style_col_standard)) # Classe
		table.addElement(TableColumn(stylename=style_col_matiere)) # Matière
		table.addElement(TableColumn(stylename=style_col_standard)) # Jour
		table.addElement(TableColumn(stylename=style_col_standard)) # Début
		table.addElement(TableColumn(stylename=style_col_standard)) # Fin
		table.addElement(TableColumn(stylename=style_col_standard)) # Salle

		# En-tête de tableau
		# Container pour les lignes d'en-tête
		th = TableHeaderRows(parent=table)
		# Ligne d'en-tête
		tr = TableRow(parent=th)
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Colleur")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Classe")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Matière")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Jour")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Début")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Fin")
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text="Salle")

		for creneau in queryset:
			tr = TableRow(parent=table)
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.colleur))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.classe))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.matiere))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.get_jour_display()))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.debut))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.fin))
			P(parent=TableCell(parent=tr, valuetype='string'), text=str(creneau.salle))

		return OdfResponse(creneaux_ods,
			filename="creneaux-{annee}.ods".format(annee=annee))
Пример #16
0
textdoc = OpenDocumentSpreadsheet()
# Create a style for the table content. One we can modify
# later in the word processor.
tablecontents = Style(parent=textdoc.styles,
                      name='Table Contents',
                      family='paragraph')
ParagraphProperties(parent=tablecontents, numberlines='false', linenumber='0')
TextProperties(parent=tablecontents, fontweight='bold')

# Create automatic styles for the column widths.
# We want two different widths, one in inches, the other one in metric.
# ODF Standard section 15.9.1
widthshort = Style(parent=textdoc.automaticstyles,
                   name='Wshort',
                   family='table-column')
TableColumnProperties(parent=widthshort, columnwidth='1.7cm')

widthwide = Style(parent=textdoc.automaticstyles,
                  name='Wwide',
                  family='table-column')
TableColumnProperties(parent=widthwide, columnwidth='1.5in')

# Start the table, and describe the columns
table = Table(parent=textdoc.spreadsheet, name='Password')
TableColumn(parent=table, numbercolumnsrepeated=4, stylename=widthshort)
TableColumn(parent=table, numbercolumnsrepeated=3, stylename=widthwide)

with open('/etc/passwd') as f:
    for line in f:
        rec = line.strip().split(':')
        tr = TableRow(parent=table)
Пример #17
0
    def initializeDocument(self):

        self.textdoc = OpenDocumentText()

        # Create a style for the table content. One we can modify
        # later in the word processor.
        self.tablecontents = Style(name="Table Contents", family="paragraph")
        self.tablecontents.addElement(
            ParagraphProperties(numberlines="false", linenumber="0"))
        self.textdoc.styles.addElement(self.tablecontents)

        # ----------------- define a few styles --------------------

        # a Bold style
        self.BoldStyle = Style(name="Bold", family="paragraph")
        self.BoldProp = TextProperties(fontweight="bold")
        self.BoldStyle.addElement(self.BoldProp)
        self.textdoc.automaticstyles.addElement(self.BoldStyle)

        # for Critical findings
        self.CriticalStyle = Style(name="Critical Findings",
                                   family="paragraph")
        self.CriticalStyleProp = TextProperties(fontweight="bold",
                                                color="#FF0000")
        self.CriticalStyle.addElement(self.CriticalStyleProp)
        self.textdoc.automaticstyles.addElement(self.CriticalStyle)

        # for High findings
        self.HighStyle = Style(name="High Findings", family="paragraph")
        self.HighStyleProp = TextProperties(fontweight="bold", color="#FF2400")
        self.HighStyle.addElement(self.HighStyleProp)
        self.textdoc.automaticstyles.addElement(self.HighStyle)

        # for Moderate findings
        self.ModerateStyle = Style(name="Moderate Findings",
                                   family="paragraph")
        self.ModerateStyleProp = TextProperties(fontweight="bold",
                                                color="#FF7F00")
        self.ModerateStyle.addElement(self.ModerateStyleProp)
        self.textdoc.automaticstyles.addElement(self.ModerateStyle)

        # for Low findings
        self.LowStyle = Style(name="Low Findings", family="paragraph")
        self.LowStyleProp = TextProperties(fontweight="bold", color="#007FFF")
        self.LowStyle.addElement(self.LowStyleProp)
        self.textdoc.automaticstyles.addElement(self.LowStyle)

        # for 'None' or 'Info' or 'Note' findings
        self.NoteStyle = Style(name="Note Findings", family="paragraph")
        self.NoteStyleProp = TextProperties(fontweight="bold")
        self.NoteStyle.addElement(self.NoteStyleProp)
        self.textdoc.automaticstyles.addElement(self.NoteStyle)

        # nessus plugins can give widely inconsistent ratings: serious/high, medium/moderate, info/note/none...
        self.riskFactorsDict = {
            'critical': self.CriticalStyle,
            'high': self.HighStyle,
            'serious': self.HighStyle,
            'medium': self.ModerateStyle,
            'moderate': self.ModerateStyle,
            'low': self.LowStyle,
            'info': self.NoteStyle,
            'note': self.NoteStyle,
            'none': self.NoteStyle
        }

        # Create automatic styles for the column widths.
        # We want two different widths, one in inches, the other one in metric.
        # ODF Standard section 15.9.1
        widthshort = Style(name="Wshort", family="table-column")
        widthshort.addElement(TableColumnProperties(columnwidth="1.7cm"))
        self.textdoc.automaticstyles.addElement(widthshort)

        widthwide = Style(name="Wwide", family="table-column")
        widthwide.addElement(TableColumnProperties(columnwidth="1.5in"))
        self.textdoc.automaticstyles.addElement(widthwide)

        # hard-code columns styles, per column
        widthwide = Style(name="Wwide", family="table-column")
        widthwide.addElement(TableColumnProperties(columnwidth="1.5in"))
        self.textdoc.automaticstyles.addElement(widthwide)

        # Start the table and describe the columns
        self.table = Table()
        if self.orderType == 'p':
            self.table.addElement(
                TableColumn(numbercolumnsrepeated=7, stylename=widthwide))

    # populate columns with headers...
        tr = TableRow()
        self.table.addElement(tr)

        # declare necessary vars
        tc1 = TableCell()
        tc2 = TableCell()
        tc3 = TableCell()
        tc4 = TableCell()
        tc5 = TableCell()
        tc6 = TableCell()
        tc7 = TableCell()
        addElem = lambda cell, text, s=self: cell.addElement(
            ODFParagraph(stylename=self.BoldStyle,
                         text=unicode(text, ODFTable.PWENC)))

        # Add Column 1: Finding Number
        addElem(tc1, 'Finding Number')
        tr.addElement(tc1)

        # Add Column 2: Vulnerability Name
        addElem(tc2, 'Vulnerability Name')
        tr.addElement(tc2)

        # Add Column 3: NIST 800-53 Mapping
        addElem(tc3, '800-53 Mapping')
        tr.addElement(tc3)

        # Add Column 4: Description
        addElem(tc4, 'Description')
        tr.addElement(tc4)

        # Add Column 5: Recommendation
        addElem(tc5, 'Recommendation')
        tr.addElement(tc5)

        # Add Column 6: CVE
        addElem(tc6, 'CVE')
        tr.addElement(tc6)

        # Add Column 6: Hosts Affected
        addElem(tc7, 'IP Address (Sample of hosts effected)')
        tr.addElement(tc7)
Пример #18
0
def colloscope_odf(request, classe):
	"""
	Affichage du colloscope d'une classe au format OpenDocument
	"""
	semaines = classe.semaine_set.order_by('debut')
	creneaux = classe.creneau_set.order_by('enseignement', 'jour', 'debut')
	colles = classe.colle_set.filter(semaine__in=semaines,
			creneau__in=creneaux)

	# On crée le dictionnaire qui à chaque créneau puis à chaque semaine
	# associe les groupes de colle
	colloscope = defaultdict(lambda: defaultdict(list))
	for colle in colles:
		colloscope[colle.creneau][colle.semaine].append(colle)

	ods = OpenDocumentSpreadsheet()
	# Styles
	style_entete = Style(parent=ods.automaticstyles,
			name='cell_entete', family='table-cell')
	TextProperties(parent=style_entete, fontweight='bold')
	style_col_semaine = Style(parent=ods.automaticstyles,
			name='col_semaine', family='table-column')
	TableColumnProperties(parent=style_col_semaine, columnwidth='1cm')
	style_col_matiere = Style(parent=ods.automaticstyles,
			name='col_matiere', family='table-column')
	TableColumnProperties(parent=style_col_matiere, columnwidth='5cm')
	style_col_colleur = Style(parent=ods.automaticstyles,
			name='col_colleur', family='table-column')
	TableColumnProperties(parent=style_col_colleur, columnwidth='5cm')
	style_col_salle = Style(parent=ods.automaticstyles,
			name='col_salle', family='table-column')
	TableColumnProperties(parent=style_col_salle, columnwidth='2cm')

	table = Table(name=str(classe), parent=ods.spreadsheet)

	# Ajout des colonnes d'en-tête fixes
	entetes_fixes = ("ID", "Matière", "Colleur", "Jour", "Horaire", "Salle")
	table.addElement(TableColumn(stylename=style_col_semaine)) # ID
	table.addElement(TableColumn(stylename=style_col_matiere)) # Matière
	table.addElement(TableColumn(stylename=style_col_colleur)) # Colleur
	table.addElement(TableColumn()) # Jour
	table.addElement(TableColumn()) # Horaire
	table.addElement(TableColumn(stylename=style_col_salle)) # Salle

	# Ajout des colonnes d'en-tête des semaines
	for _ in semaines:
		table.addElement(TableColumn(stylename=style_col_semaine))

	# Container pour les lignes d'en-tête
	th = TableHeaderRows(parent=table)
	# Ligne d'en-tête avec les semestres au-dessus des semaines
	tr = TableRow(parent=th)
	for entete in entetes_fixes:
		P(parent=TableCell(parent=tr, valuetype='string',
			numberrowsspanned=2, numbercolumnsspanned=1,
			stylename=style_entete), text=entete)

	# On doit savoir combien de semaines se trouvent sur chaque période
	# pour afficher les en-têtes sur le bon nombre de colonnes
	nb_semaines = dict([
		(
			periode[0],
			0,
		)
		for periode in constantes.PERIODE_CHOICES
	])
	for semaine in semaines:
		nb_semaines[semaine.periode] += 1

	# Insertion des titres des périodes
	for periode_id, periode_nom in constantes.PERIODE_CHOICES:
		if nb_semaines[periode_id] > 0:
			P(parent=TableCell(parent=tr, valuetype='string',
				numbercolumnsspanned=nb_semaines[periode_id],
				numberrowsspanned=1,
				stylename=style_entete), text=periode_nom.capitalize())
			CoveredTableCell(parent=tr,
					numbercolumnsrepeated=nb_semaines[periode_id] - 1)

	tr = TableRow(parent=th)
	# Ligne d'en-tête avec seulement les semaines
	# On doit placer des cellules vides pour les case d'en-tête situées
	# avant les semaines
	CoveredTableCell(parent=tr, numbercolumnsrepeated=len(entetes_fixes))
	# Puis on ajoute les semaines
	for semaine in semaines:
		P(parent=TableCell(parent=tr, valuetype='string',
			stylename=style_entete), text=semaine.numero)

	# Colles par créneau
	for creneau in creneaux:
		tr = TableRow(parent=table)
		P(parent=TableCell(parent=tr, valuetype='float', value=creneau.pk),
			text=creneau.pk)
		P(parent=TableCell(parent=tr, valuetype='string'),
				text=creneau.matiere)
		P(parent=TableCell(parent=tr, valuetype='string'),
				text=creneau.colleur)
		P(parent=TableCell(parent=tr, valuetype='string'),
				text=creneau.get_jour_display())
		P(parent=TableCell(parent=tr, valuetype='time',
				timevalue=creneau.debut.strftime("PT%HH%MM%SS")),
				text=creneau.debut.strftime("%H:%M"))
		P(parent=TableCell(parent=tr, valuetype='string'),
				text=creneau.salle)
		for semaine in semaines:
			groupes_texte = ','.join([str(c.groupe) for c in
					colloscope[creneau][semaine] if c.groupe])
			cell = TableCell(parent=tr)
			if groupes_texte:
				cell.valuetype="string"
				P(parent=cell, text=groupes_texte)

	return OdfResponse(ods, filename="colloscope_{}.ods".format(classe.slug))
Пример #19
0
def par_classe(classes, fileout):
    ods = OpenDocumentSpreadsheet()

    style_civilite = Style(parent=ods.automaticstyles,
                           name='col_civilite',
                           family='table-column')
    TableColumnProperties(parent=style_civilite, columnwidth='1cm')

    style_nom = Style(parent=ods.automaticstyles,
                      name='col_nom',
                      family='table-column')
    TableColumnProperties(parent=style_nom, columnwidth='4.5cm')

    style_date = Style(parent=ods.automaticstyles,
                       name='col_date',
                       family='table-column')
    TableColumnProperties(parent=style_date, columnwidth='3.2cm')

    style_internat = Style(parent=ods.automaticstyles,
                           name='col_internat',
                           family='table-column')
    TableColumnProperties(parent=style_internat, columnwidth='3.2cm')

    style_classe = Style(parent=ods.automaticstyles,
                         name='col_classe',
                         family='table-column')
    TableColumnProperties(parent=style_classe, columnwidth='3.2cm')

    style_etat_voeu = Style(parent=ods.automaticstyles,
                            name='col_etat_voeu',
                            family='table-column')
    TableColumnProperties(parent=style_etat_voeu, columnwidth='4cm')

    style_titre = Style(parent=ods.automaticstyles,
                        name='cell_titre',
                        family='table-cell')
    TextProperties(parent=style_titre, fontweight='bold', fontsize='14pt')
    ParagraphProperties(parent=style_titre, textalign='center')

    style_ligne_titre = Style(parent=ods.automaticstyles,
                              name='ligne_titre',
                              family='table-row')
    TableRowProperties(parent=style_ligne_titre, rowheight='8mm')

    style_entete = Style(parent=ods.automaticstyles,
                         name='cell_entete',
                         family='table-cell')
    TextProperties(parent=style_entete, fontweight='bold')

    number_style_date_format = odf.number.DateStyle(parent=ods.automaticstyles,
                                                    name='date_number')
    odf.number.Day(parent=number_style_date_format, style='long')
    odf.number.Text(parent=number_style_date_format, text="/")
    odf.number.Month(parent=number_style_date_format, style='long')
    odf.number.Text(parent=number_style_date_format, text="/")
    odf.number.Year(parent=number_style_date_format, style='long')
    style_date_format = Style(parent=ods.automaticstyles,
                              name='cell_date',
                              family='table-cell',
                              datastylename=number_style_date_format)

    for classe in classes:
        table = Table(name=str(classe))
        table.addElement(TableColumn(stylename=style_civilite))  # Sexe
        table.addElement(TableColumn(stylename=style_nom))  # Nom
        table.addElement(TableColumn(stylename=style_nom))  # Prénom
        table.addElement(
            TableColumn(stylename=style_date))  # Date de naissance
        table.addElement(TableColumn(stylename=style_internat))  # Internat
        table.addElement(TableColumn(stylename=style_etat_voeu))  # État vœu
        table.addElement(TableColumn(stylename=style_nom))  # E-mail
        table.addElement(TableColumn(stylename=style_nom))  # Téléphone
        table.addElement(TableColumn(stylename=style_nom))  # Mobile

        # En-tête de la feuille
        tr = TableRow(parent=table, stylename=style_ligne_titre)
        cell = TableCell(parent=tr,
                         numbercolumnsspanned=9,
                         numberrowsspanned=1,
                         valuetype='string',
                         stylename=style_titre)
        cell.addElement(P(text=str(classe)))
        CoveredTableCell(parent=tr, numbercolumnsrepeated=8)

        tr = TableRow(parent=table)
        TableCell(parent=tr)  # Sexe
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Nom")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Prénom")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Date de naissance")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Internat")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="État Parcoursup")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="E-mail")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Téléphone")
        P(parent=TableCell(parent=tr,
                           valuetype='string',
                           stylename=style_entete),
          text="Mobile")

        for etudiant in classe.admissions().order_by('nom'):
            tr = TableRow()
            table.addElement(tr)

            TableCell(parent=tr, valuetype='string').addElement(
                P(text=etudiant.get_sexe_display()))

            TableCell(parent=tr,
                      valuetype='string').addElement(P(text=etudiant.nom))

            TableCell(parent=tr,
                      valuetype='string').addElement(P(text=etudiant.prenom))

            cell = TableCell(valuetype='date',
                             datevalue=str(etudiant.date_naissance),
                             stylename=style_date_format)
            cell.addElement(P(text=etudiant.date_naissance))
            tr.addElement(cell)

            cell = TableCell(valuetype='string')
            if etudiant.proposition_actuelle.internat:
                cell.addElement(P(text="Interne"))
            tr.addElement(cell)

            TableCell(parent=tr, valuetype='string').addElement(
                P(text=etudiant.proposition_actuelle.get_etat_display()))

            TableCell(parent=tr,
                      valuetype='string').addElement(P(text=etudiant.email))
            TableCell(parent=tr, valuetype='string').addElement(
                P(text=etudiant.telephone))
            TableCell(parent=tr, valuetype='string').addElement(
                P(text=etudiant.telephone_mobile))

        ods.spreadsheet.addElement(table)

    # Liste générale pour l'infirmerie
    table = Table(name="Infirmerie")
    ods.spreadsheet.addElement(table)
    table.addElement(TableColumn(stylename=style_civilite))  # Sexe
    table.addElement(TableColumn(stylename=style_nom))  # Nom
    table.addElement(TableColumn(stylename=style_nom))  # Prénom
    table.addElement(TableColumn(stylename=style_classe))  # Classe
    table.addElement(TableColumn(stylename=style_date))  # Date de naissance
    table.addElement(TableColumn(stylename=style_internat))  # Internat

    # En-tête de la feuille
    tr = TableRow(parent=table, stylename=style_ligne_titre)
    cell = TableCell(parent=tr,
                     numbercolumnsspanned=9,
                     numberrowsspanned=1,
                     valuetype='string',
                     stylename=style_titre)
    cell.addElement(P(text="Liste de tous les étudiants admis"))
    tr = TableRow(parent=table)
    TableCell(parent=tr)  # Sexe
    P(parent=TableCell(parent=tr, valuetype='string', stylename=style_entete),
      text="Nom")
    P(parent=TableCell(parent=tr, valuetype='string', stylename=style_entete),
      text="Prénom")
    P(parent=TableCell(parent=tr, valuetype='string', stylename=style_entete),
      text="Classe")
    P(parent=TableCell(parent=tr, valuetype='string', stylename=style_entete),
      text="Date de naissance")
    P(parent=TableCell(parent=tr, valuetype='string', stylename=style_entete),
      text="Internat")

    for etudiant in Etudiant.objects.filter(
            proposition_actuelle__isnull=False,
            proposition_actuelle__date_demission__isnull=True).order_by(
                'nom', 'prenom'):

        tr = TableRow(parent=table)

        TableCell(parent=tr, valuetype='string').addElement(
            P(text=etudiant.get_sexe_display()))

        TableCell(parent=tr,
                  valuetype='string').addElement(P(text=etudiant.nom))

        TableCell(parent=tr,
                  valuetype='string').addElement(P(text=etudiant.prenom))

        TableCell(parent=tr, valuetype='string').addElement(
            P(text=str(etudiant.proposition_actuelle.classe)))

        cell = TableCell(valuetype='date',
                         datevalue=str(etudiant.date_naissance),
                         stylename=style_date_format)
        cell.addElement(P(text=etudiant.date_naissance))
        tr.addElement(cell)

        cell = TableCell(valuetype='string')
        if etudiant.proposition_actuelle.internat:
            cell.addElement(P(text="Interne"))
        tr.addElement(cell)

    ods.write(fileout)
Пример #20
0
def write_sheet():
    wide = Style(name="Wide", family="table-column")
    wide.addElement(TableColumnProperties(columnwidth="10cm"))
    ods.automaticstyles.addElement(wide)
    table.addElement(TableColumn(stylename='Wide'))
    ods.spreadsheet.addElement(table)
Пример #21
0
 def addTableColumnStyle(self, id, name, properties={}):
     style = Style(name=name, family="table-column")
     style.addElement(TableColumnProperties(**properties))
     setattr(self, id, style)
     self.document.automaticstyles.addElement(style)
Пример #22
0
def save(telephoneDir, subdivision, collaborator, number, telephoneType):
    textdoc = OpenDocumentSpreadsheet()

    tablecontents = Style(name="Table Contents", family="paragraph")
    tablecontents.addElement(
        ParagraphProperties(numberlines="false", linenumber="0"))
    textdoc.styles.addElement(tablecontents)

    style2 = Style(name="style2", family="table-column")
    style2.addElement(TableColumnProperties(columnwidth="2cm"))
    textdoc.automaticstyles.addElement(style2)

    style6 = Style(name="style6", family="table-column")
    style6.addElement(TableColumnProperties(columnwidth="6cm"))
    textdoc.automaticstyles.addElement(style6)

    table = Table(name=u"Подразделения")
    table.addElement(TableColumn(numbercolumnsrepeated=2, stylename=style6))

    def row(rec):
        tr = TableRow()
        table.addElement(tr)
        for r in rec:
            tc = TableCell()
            tr.addElement(tc)
            p = P(stylename=tablecontents, text=r)
            tc.addElement(p)

    row((u"подразделение", u"головное подразделение"))
    row((telephoneDir.subdivision.name.decode("utf-8"), ""))

    def write(subdivision):
        for s in subdivision.subdivisions:
            row((s.name.decode("utf-8"), subdivision.name.decode("utf-8")))
            write(s)

    write(telephoneDir.subdivision)

    textdoc.spreadsheet.addElement(table)

    table = Table(name=u"Телефонный справочник")
    table.addElement(TableColumn(numbercolumnsrepeated=2, stylename=style2))
    table.addElement(TableColumn(numbercolumnsrepeated=4, stylename=style6))

    row((u"телефон", u"код сотр.", u"фамилия", u"имя", u"отчество",
         u"подразделение", u"тип тел."))

    def find(c, subdivision):
        if c in subdivision.collaborators:
            return subdivision.name.decode("utf-8")
        else:
            for s in subdivision.subdivisions:
                r = find(c, s)
                if r:
                    return r

    subdivision = int(subdivision)
    telephoneType = int(telephoneType)
    collaborator = collaborator.encode('utf-8')
    number = number.encode('utf-8')
    if not subdivision:
        lambdaSubdivision = lambda rec: True
    else:
        subdivisions = list(sorted(telephoneDir.subdivision.iterSubdivision()))
        subdivisions.insert(0, 'все')
        s = subdivisions[subdivision]
        lambdaSubdivision = lambda rec: rec.collaborator in s
    if not collaborator:
        lambdaCollaborator = lambda rec: True
    else:
        lambdaCollaborator = lambda rec: str(rec.collaborator)[0:len(
            collaborator)] == collaborator
    if not number:
        lambdaNumber = lambda rec: True
    else:
        lambdaNumber = lambda rec: str(rec.telephone.number)[0:len(number)
                                                             ] == number
    if not telephoneType:
        lambdaTelephoneType = lambda rec: True
    else:
        telephoneTypes = list(sorted(telephoneDir.telephones.telephoneTypes))
        telephoneTypes.insert(0, 'все')
        t = telephoneTypes[telephoneType]
        lambdaTelephoneType = lambda rec: rec.telephone.type == t
    tmpDir = list(sorted(telephoneDir))
    tmpDir = filter(lambda telephone: lambdaSubdivision(telephone) and \
                                                     lambdaCollaborator(telephone) and \
                                                     lambdaNumber(telephone) and \
                                                     lambdaTelephoneType(telephone), tmpDir)
    print subdivision, telephoneType, collaborator, number
    for r in tmpDir:
        row((r.telephone.number, r.collaborator.code,
             r.collaborator.family.decode("utf-8"),
             r.collaborator.name.decode("utf-8"),
             r.collaborator.patronym.decode("utf-8"),
             find(r.collaborator, telephoneDir.subdivision),
             r.telephone.type.name.decode("utf-8")))

    textdoc.spreadsheet.addElement(table)
    textdoc.save("telephonedir.ods")
Пример #23
0
# Page break style.
s = Style(name="PageBreak", parentstylename="Standard", family="paragraph")
s.addElement(ParagraphProperties(breakbefore="page"))
doc.automaticstyles.addElement(s)

# Bold text.
s = Style(name="TextBold", family="text")
s.addElement(
    TextProperties(fontweight="bold",
                   fontweightasian="bold",
                   fontweightcomplex="bold"))
doc.automaticstyles.addElement(s)

s = Style(name="AutoWidth", family="table-column")
s.addElement(TableColumnProperties(useoptimalcolumnwidth="true"))
doc.automaticstyles.addElement(s)

s = Style(name="NameWidth", family="table-column")
s.addElement(TableColumnProperties(columnwidth="1cm"))
doc.automaticstyles.addElement(s)

s = Style(name="TableAutoWidth", family="table-column")
s.addElement(TableColumnProperties(useoptimalcolumnwidth='true'))
doc.styles.addElement(s)

# TOC.
toc = TableOfContent(name='toc')
toc.addElement(TableOfContentSource(outlinelevel='2', useindexmarks='false'))
doc.text.addElement(toc)
page_break(doc)
Пример #24
0
from odf.style import Style, TextProperties, TableColumnProperties, Map
from odf.number import NumberStyle, CurrencyStyle, CurrencySymbol, Number, Text
from odf.text import P
from odf.table import Table, TableColumn, TableRow, TableCell

textdoc = OpenDocumentSpreadsheet()
# Create a style for the table content. One we can modify
# later in the spreadsheet.
tablecontents = Style(name="Large number", family="table-cell")
tablecontents.addElement(TextProperties(fontfamily="Arial", fontsize="15pt"))
textdoc.styles.addElement(tablecontents)

# Create automatic styles for the column widths.
widewidth = Style(name="co1", family="table-column")
widewidth.addElement(
    TableColumnProperties(columnwidth="2.8cm", breakbefore="auto"))
textdoc.automaticstyles.addElement(widewidth)

# Create the styles for $AUD format currency values
ns1 = CurrencyStyle(name="positive-AUD", volatile="true")
ns1.addElement(CurrencySymbol(language="en", country="AU", text=u"$"))
ns1.addElement(Number(decimalplaces="2", minintegerdigits="1",
                      grouping="true"))
textdoc.styles.addElement(ns1)

# Create the main style.
ns2 = CurrencyStyle(name="main-AUD")
ns2.addElement(TextProperties(color="#ff0000"))
ns2.addElement(Text(text=u"-"))
ns2.addElement(CurrencySymbol(language="en", country="AU", text=u"$"))
ns2.addElement(Number(decimalplaces="2", minintegerdigits="1",
    ranks=loadRanks(rfname)
tagsr= None
if tm1roundtrip:
    tagsr=loadTags(tm1roundtrip)
tagsp= None
if tm1print:
    tagsp=loadTags(tm1print)

print "targetApps: ",targetApps

textdoc = OpenDocumentSpreadsheet()

# Create automatic styles for the column widths.
# ODF Standard section 15.9.1
nameColStyle = Style(name="nameColStyle", family="table-column")
nameColStyle.addElement(TableColumnProperties(columnwidth="6cm"))
textdoc.automaticstyles.addElement(nameColStyle)

tagColStyle = Style(name="tagColStyle", family="table-column")
tagColStyle.addElement(TableColumnProperties(columnwidth="5cm"))
tagColStyle.addElement(ParagraphProperties(textalign="left")) #??
textdoc.automaticstyles.addElement(tagColStyle)

rankColStyle = Style(name="rankColStyle", family="table-column")
rankColStyle.addElement(TableColumnProperties(columnwidth="1.5cm"))
rankColStyle.addElement(ParagraphProperties(textalign="center")) #??
textdoc.automaticstyles.addElement(rankColStyle)

valColStyle = Style(name="valColStyle", family="table-column")
valColStyle.addElement(TableColumnProperties(columnwidth="0.9cm"))
valColStyle.addElement(ParagraphProperties(textalign="center")) #??