示例#1
0
def calc(title, xlabel, ylabel, xdata, ydata):
    from odf.opendocument import OpenDocumentSpreadsheet
    from odf.text import P
    from odf.table import Table, TableColumn, TableRow, TableCell

    outfile = NamedTemporaryFile(mode='wb',
                                 suffix='.ods',
                                 prefix='eyesCalc_',
                                 delete=False)
    doc = OpenDocumentSpreadsheet()
    table = Table(
        name="ExpEYES {0}".format(time.strftime("%Y-%m-%d %Hh%Mm%Ss")))
    doc.spreadsheet.addElement(table)
    ## add rows into the table
    for i in range(len(xdata)):
        tr = TableRow()
        table.addElement(tr)
        if len(ydata.shape) == 1:
            # single y data
            tr.addElement(TableCell(valuetype="float", value=str(xdata[i])))
            tr.addElement(TableCell(valuetype="float", value=str(ydata[i])))
        else:
            # multiple y data
            tr.addElement(TableCell(valuetype="float", value=str(xdata[i])))
            for j in range(ydata.shape[0]):
                tr.addElement(
                    TableCell(valuetype="float", value=str(ydata[j][i])))
    doc.save(outfile)
    outfile.close()
    call("(localc {}&)".format(outfile.name), shell=True)
    return [outfile]
示例#2
0
def calc(title, xlabel, ylabel, xdata, ydata):
    from odf.opendocument import OpenDocumentSpreadsheet
    from odf.text import P
    from odf.table import Table, TableColumn, TableRow, TableCell
    
    outfile = NamedTemporaryFile(
        mode='wb', 
        suffix='.ods',
        prefix='eyesCalc_',
        delete=False)
    doc=OpenDocumentSpreadsheet()
    table = Table(name="ExpEYES {0}".format(time.strftime("%Y-%m-%d %Hh%Mm%Ss")))
    doc.spreadsheet.addElement(table)
    ## add rows into the table
    for i in range(len(xdata)):
        tr = TableRow()
        table.addElement(tr)
        if len(ydata.shape)==1:
            # single y data
            tr.addElement(TableCell(valuetype="float", value=str(xdata[i])))
            tr.addElement(TableCell(valuetype="float", value=str(ydata[i])))
        else:
            # multiple y data
            tr.addElement(TableCell(valuetype="float", value=str(xdata[i])))
            for j in range(ydata.shape[0]):
                tr.addElement(TableCell(valuetype="float", value=str(ydata[j][i])))
    doc.save(outfile)
    outfile.close()
    call("(localc {}&)".format(outfile.name), shell=True)
    return [outfile]
示例#3
0
    def test_percentage(self):
        """ Test that an automatic style can refer to a PercentageStyle as a datastylename """
        doc = OpenDocumentSpreadsheet()
        nonze = PercentageStyle(name='N11')
        nonze.addElement(Number(decimalplaces='2', minintegerdigits='1'))
        nonze.addElement(Text(text='%'))
        doc.automaticstyles.addElement(nonze)
        pourcent = Style(name='pourcent',
                         family='table-cell',
                         datastylename='N11')
        pourcent.addElement(ParagraphProperties(textalign='center'))
        pourcent.addElement(
            TextProperties(attributes={
                'fontsize': "10pt",
                'fontweight': "bold",
                'color': "#000000"
            }))
        doc.automaticstyles.addElement(pourcent)

        table = Table(name='sheet1')
        tr = TableRow()
        tc = TableCell(formula='=AVERAGE(C4:CB62)/2',
                       stylename='pourcent',
                       valuetype='percentage')
        tr.addElement(tc)
        table.addElement(tr)
        doc.spreadsheet.addElement(table)
        doc.save(u"TEST.ods")
        self.saved = True
        d = load(u"TEST.ods")
        result = d.contentxml()  # contentxml is supposed to yeld a bytes
        self.assertNotEqual(-1, result.find(b'''<number:percentage-style'''))
        self.assertNotEqual(-1,
                            result.find(b'''style:data-style-name="N11"'''))
        self.assertNotEqual(-1, result.find(b'''style:name="pourcent"'''))
示例#4
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
 def save_table(filename, form, datatable):
     cols = datatable.columnCount()
     rows = datatable.rowCount()
     if form == "Text Files (*.odt)":
         doc = OpenDocumentSpreadsheet()
         table = Table()
         for row in range(rows):
             tr = TableRow()
             for col in range(cols):
                 tc = TableCell(valuetype='string')
                 data = datatable.model().index(row, col).data()
                 if data is None:
                     data = ""
                 tc.addElement(P(text=data))
                 tr.addElement(tc)
             table.addElement(tr)
         doc.spreadsheet.addElement(table)
         doc.save(filename, True)
     elif form == "Text Files (*.docx)":
         doc = docx.Document()
         table = doc.add_table(rows=rows, cols=cols)
         table.style = 'Table Grid'
         for row in range(rows):
             for col in range(cols):
                 cell = table.cell(row, col)
                 data = datatable.model().index(row, col).data()
                 if data is None:
                     data = ""
                 cell.text = data
         doc.save(filename)
示例#6
0
    def output_reqset(self, reqset, reqscont):

        # Because of a problem with the current OpenOffice versions,
        # there is the need to sometimes arrange requirements as rows
        # and sometimes as columns:
        # It is not possible to define the range of a list input as a
        # row: it must be a column.
        # The order dictionary holds the number - which can be
        # computed in a row or column.
        def create_reqs_index(srqes):
            sreqs_index = {}
            cnt = 0
            for req in sreqs:
                sreqs_index[req] = cnt
                cnt += 1
            return sreqs_index

        # The topological sort is needed.
        sreqs = topological_sort(self.topic_set.reqset)

        # Create the row / column index of each requirement
        self.sreqs_index = create_reqs_index(sreqs)

        # Create and save the document
        calcdoc = OpenDocumentSpreadsheet()
        self.create_meta(calcdoc, reqscont)
        self.create_styles(calcdoc)
        self.create_costs_sheet(calcdoc, sreqs)
        self.create_deps_sheet(calcdoc, sreqs)
        self.create_sums_sheet(calcdoc, sreqs)
        self.create_constants_sheet(calcdoc)
        self.create_result_sheet(calcdoc, sreqs)
        calcdoc.save(self.output_filename, True)
示例#7
0
    def test_percentage(self):
        """ Test that an automatic style can refer to a PercentageStyle as a datastylename """
        doc = OpenDocumentSpreadsheet()
        nonze = PercentageStyle(name='N11')
        nonze.addElement(Number(decimalplaces='2', minintegerdigits='1'))
        nonze.addElement(Text(text='%'))
        doc.automaticstyles.addElement(nonze)
        pourcent = Style(name='pourcent', family='table-cell', datastylename='N11')
        pourcent.addElement(ParagraphProperties(textalign='center'))
        pourcent.addElement(TextProperties(attributes={'fontsize':"10pt",'fontweight':"bold", 'color':"#000000" }))
        doc.automaticstyles.addElement(pourcent)

        table = Table(name='sheet1')
        tr = TableRow()
        tc = TableCell(formula='=AVERAGE(C4:CB62)/2',stylename='pourcent', valuetype='percentage')
        tr.addElement(tc)
        table.addElement(tr)
        doc.spreadsheet.addElement(table)
        doc.save("TEST.odt")
        self.saved = True
        d = load("TEST.odt")
        result = d.contentxml()
        self.assertNotEqual(-1, result.find(u'''<number:percentage-style'''))
        self.assertNotEqual(-1, result.find(u'''style:data-style-name="N11"'''))
        self.assertNotEqual(-1, result.find(u'''style:name="pourcent"'''))
示例#8
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
示例#9
0
文件: views.py 项目: zxdvd/snoek
def _toODSFile(odf_table_list, filename):

    doc = OpenDocumentSpreadsheet()
    for t in odf_table_list:
        doc.spreadsheet.addElement(t)

    doc.save('/tmp/' + filename, True)
    return file('/tmp/' + filename + '.ods')
示例#10
0
文件: views.py 项目: medwinz/snoek
def _toODSFile(odf_table_list, filename):

    doc = OpenDocumentSpreadsheet()
    for t in odf_table_list:
        doc.spreadsheet.addElement(t)

    doc.save('/tmp/' + filename, True)
    return file('/tmp/' + filename + '.ods')
示例#11
0
class ODSOutput(SpreadsheetOutput):
    def open(self):
        self.workbook = OpenDocumentSpreadsheet()

    def _make_cell(self, value):
        """ Util for creating an ods cell """

        if value:
            try:
                # See if value parses as a float
                cell = odf.table.TableCell(valuetype="float",
                                           value=float(value))
            except ValueError:
                cell = odf.table.TableCell(valuetype="string")
        else:
            cell = odf.table.TableCell(valuetype="Nonetype")

        p = odf.text.P(text=value)
        cell.addElement(p)

        return cell

    def write_sheet(self, sheet_name, sheet):

        worksheet = odf.table.Table(name=sheet_name)
        sheet_header = list(sheet)

        header_row = odf.table.TableRow()

        for header in sheet_header:
            header_row.addElement(self._make_cell(header))

        worksheet.addElement(header_row)

        for sheet_line in sheet.lines:
            row = odf.table.TableRow()
            for header in sheet_header:
                value = sheet_line.get(header)
                if isinstance(value, str):
                    new_value = ILLEGAL_CHARACTERS_RE.sub("", value)
                    if new_value != value:
                        warn(
                            _("Character(s) in '{}' are not allowed in a spreadsheet cell. Those character(s) will be removed"
                              ).format(value),
                            DataErrorWarning,
                        )
                    value = new_value
                row.addElement(self._make_cell(value))
            worksheet.addElement(row)

        self.workbook.spreadsheet.addElement(worksheet)

    def close(self):
        self.workbook.save(self.output_name)
示例#12
0
文件: parma.py 项目: Zelenyy/phd-code
def main():
    input_dir = os.path.join(PARMA_DIR, "input")
    doc = OpenDocumentSpreadsheet()
    table_list = []
    table_list.append(
        convert_FFPtable_day(os.path.join(input_dir, "FFPtable.day")))
    table_list.append(
        convert_FFPtable_USO(os.path.join(input_dir, "FFPtable.uso")))
    for table in table_list:
        doc.spreadsheet.addElement(table)
    doc.save("parma.ods")
示例#13
0
    def _create_odf(self):
        doc = OpenDocumentSpreadsheet()
        table = Table(name="Table1")
        for row in self.df.values:
            tr = TableRow()
            for val in row:
                tc = TableCell(valuetype="string")
                tc.addElement(P(text=val))
                tr.addElement(tc)
            table.addElement(tr)

        doc.spreadsheet.addElement(table)
        doc.save(self.fname_odf)
class SpreadSheet(object):
    def __init__(self):
        self._document = OpenDocumentSpreadsheet()
        self._sheets = {}

    def sheet(self, name):
        if name not in self._sheets:
            self._sheets[name] = Sheet(name)
            self._document.spreadsheet.addElement(self._sheets[name]._table)

        return self._sheets[name]

    def add_style(self, name, family, styles, **kwargs):
        style = Style(name=name, family=family, **kwargs)

        for v in styles:
            style.addElement(v)

        self._document.automaticstyles.addElement(style)

    def add_font(self, fontface):
        self._document.fontfacedecls.addElement(fontface)

    def save(self, buf):
        return self._document.save(buf)
示例#15
0
    def write_output_data_to_ods(self, output_filename):
        """Write output data in ODS file.

        :param output_filename: Path of the output_filename.
        """

        ods_file = OpenDocumentSpreadsheet()
        table = Table(name=self.output_sheet_name)
        for row in self.output_data:
            table_row = TableRow()
            for val in row:
                table_cell = TableCell(valuetype="string")
                table_cell.addElement(P(text=val))
                table_row.addElement(table_cell)
            table.addElement(table_row)
        ods_file.spreadsheet.addElement(table)
        ods_file.save(output_filename)
示例#16
0
class OdsWriter(Writer):
    def write(self):
        super().write()
        self.doc = OpenDocumentSpreadsheet()

        self.cell_formats = {}
        for key, value in self.colours.items():
            style = Style(name=key, family="table-cell")
            style.addElement(TableCellProperties(backgroundcolor="#" + value))
            self.doc.automaticstyles.addElement(style)
            self.cell_formats[key] = style

        for sheet in self.sheets:
            self.write_table(sheet)
        self.doc.save(self.filename, True)

    def write_table(self, name):
        table = Table(name=name)
        tr = TableRow()
        for header in self.sheet_data[name]["headers"]:
            tc = TableCell(valuetype="string", stylename="s")
            tc.addElement(P(text=header))
            tr.addElement(tc)
        table.addElement(tr)
        for row in self.sheet_data[name]["rows"]:
            tr = TableRow()
            c = 0
            for col in row:
                if c >= len(self.sheet_data[name]["colours"]):
                    cell_format = "p"
                else:
                    cell_format = self.sheet_data[name]["colours"][c]
                tc = TableCell(valuetype="string", stylename=cell_format)
                if col is None:
                    col = "NULL"
                tc.addElement(P(text=col))
                tr.addElement(tc)
                c += 1
            table.addElement(tr)
        self.doc.spreadsheet.addElement(table)
示例#17
0
ods_doc = OpenDocumentSpreadsheet()
# Create a new Table/Sheet
sheet = Table(name="odfpy_ods")
# Create a new empty row
tablerow = TableRow()
# Create 3 new cells with different value type
cell1 = TableCell(valuetype="string")
cell1.addElement(P(text="Hello World !"))
cell2 = TableCell(valuetype="float", value=1)
cell3 = TableCell(valuetype="currency", currency="CHF", value="-8100")
# Add these cells to the row
tablerow.addElement(cell1)
tablerow.addElement(cell2)
tablerow.addElement(cell3)
# Add the row to the table
sheet.addElement(tablerow)
# Add the table/sheet to the ods document
ods_doc.spreadsheet.addElement(sheet)
# Save the document
ods_doc.save(r"C:\FichiersLocauxRevit\odfpy.ods")

# Load an ods document
ods_doc = load(r"C:\FichiersLocauxRevit\odfpy.ods")
# Get first sheet
sheet = ods_doc.getElementsByType(Table)[0]
# Get cell a i, j (row, column)
i, j = 1, 2
row = sheet.getElementsByType(TableRow)[i - 1]
cell = row.getElementsByType(TableCell)[j - 1]
print cell.value
示例#18
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")
 def create_function(full_path):
     textdoc = OpenDocumentSpreadsheet()
     textdoc.styles.addElement(self.build_default_style())
     textdoc.save(full_path)
示例#20
0
class ODSWriter:

    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)


    def addtable(self, name, hdr): 
        self.table = Table(name=str(name))
        self.doc.spreadsheet.addElement(self.table)

        for h in hdr[:-2]:
            tcol = TableColumn(stylename=self.colStyle30)
            self.table.addElement(tcol)
        tcol = TableColumn(stylename=self.colStyle40)
        self.table.addElement(tcol)
        tcol = TableColumn(stylename=self.colStyle200)
        self.table.addElement(tcol)

        self.exrow=1
        tr = TableRow()
        for item in hdr:
            tc = TableCell(stylename="hdrStyle") #empty cell
            tr.addElement(tc)
            p = P(text=item)
            tc.addElement(p)
        self.table.addElement(tr)
        return

    def writerow(self, items): 
        self.exrow += 1
            #pass
        # If there is and image in the row, make the row high
        textrow = True
        for item in items:
            if isinstance(item, np.ndarray):
                textrow = False
                break


        if textrow:
            tr = TableRow(stylename=self.itemRowStyle1)
        else:
            tr = TableRow(stylename=self.itemRowStyle3)

        cells = "ABCDEFGHIJKLM"
        for n in range(len(items)):
            if isinstance(items[n], (int, np.int64)):
                tc = TableCell(valuetype="float", value=str(items[n]), stylename="cellStyle1")
                p = P(text=items[n])
            elif isinstance(items[n], float):
                tc = TableCell(valuetype="float", value=str("%4.1f"%items[n]), stylename="cellStyle1")
                p = P(text=items[n])
            elif isinstance(items[n], np.ndarray):
                tc = TableCell(stylename="cellStyle1")
                fname = tempfile.mktemp(".jpg")
                sf=0.08
                im = items[n]
                imageio.imwrite(fname, items[n])
                f = draw.Frame(endcelladdress="import.%s%d"%(cells[n],self.exrow),endx="%dmm"%int(sf*im.shape[1]), endy="%dmm"%int(sf*im.shape[0]))
                tc.addElement(f)
                href=self.doc.addPicture(fname)
                i = draw.Image(href=href, type="simple", show="embed", actuate="onLoad")
                f.addElement(i)
                p = P(text="")
                i.addElement(p)
            else:
                tc = TableCell(stylename="cellStyle1") #empty cell
                p = P(text=items[n])
            tc.addElement(p)
            tr.addElement(tc)
        self.table.addElement(tr)
        return

    def save(self, ofname):
        self.doc.save(ofname)
示例#21
0
    def to_ods(self, *selection):
        if not ODFLIB_INSTALLED:
            raise ODFLIBNotInstalled(_('odfpy not installed.'))
        if self.fcn_list:
            stat_list = self.fcn_list[:]
            order_text = "   Ordered by: " + self.sort_type + '\n'
        else:
            stat_list = self.stats.keys()
            order_text = "   Random listing order was used\n"
        for s in selection:
            stat_list, __ = self.eval_print_amount(s, stat_list, '')
        spreadsheet = OpenDocumentSpreadsheet()
        table = Table(name="Profile")
        for fn in self.files:
            tcf = TableCell()
            tcf.addElement(P(text=fn))
            trf = TableRow()
            trf.addElement(tcf)
            table.addElement(trf)

        tc_summary = TableCell()
        summary_text = '%d function calls (%d primitive calls) in %.6f \
                        seconds' % (self.total_calls, self.prim_calls,
                                    self.total_tt)
        tc_summary.addElement(P(text=summary_text))
        tr_summary = TableRow()
        tr_summary.addElement(tc_summary)
        table.addElement(tr_summary)

        tc_order = TableCell()
        tc_order.addElement(P(text=order_text))
        tr_order = TableRow()
        tr_order.addElement(tc_order)
        table.addElement(tr_order)

        tr_header = TableRow()
        tc_cc = TableCell()
        tc_cc.addElement(P(text='Total Call Count'))
        tr_header.addElement(tc_cc)

        tc_pc = TableCell()
        tc_pc.addElement(P(text='Primitive Call Count'))
        tr_header.addElement(tc_pc)

        tc_tt = TableCell()
        tc_tt.addElement(P(text='Total Time(seconds)'))
        tr_header.addElement(tc_tt)

        tc_pc = TableCell()
        tc_pc.addElement(P(text='Time Per call(seconds)'))
        tr_header.addElement(tc_pc)

        tc_ct = TableCell()
        tc_ct.addElement(P(text='Cumulative Time(seconds)'))
        tr_header.addElement(tc_ct)

        tc_pt = TableCell()
        tc_pt.addElement(P(text='Cumulative Time per call(seconds)'))
        tr_header.addElement(tc_pt)

        tc_nfl = TableCell()
        tc_nfl.addElement(P(text='filename:lineno(function)'))
        tr_header.addElement(tc_nfl)

        table.addElement(tr_header)

        for func in stat_list:
            cc, nc, tt, ct, __ = self.stats[func]
            tr_header = TableRow()
            tc_nc = TableCell()
            tc_nc.addElement(P(text=nc))
            tr_header.addElement(tc_nc)

            tc_pc = TableCell()
            tc_pc.addElement(P(text=cc))
            tr_header.addElement(tc_pc)

            tc_tt = TableCell()
            tc_tt.addElement(P(text=tt))
            tr_header.addElement(tc_tt)

            tc_tpc = TableCell()
            tc_tpc.addElement(P(text=(None if nc == 0 else float(tt) / nc)))
            tr_header.addElement(tc_tpc)

            tc_ct = TableCell()
            tc_ct.addElement(P(text=ct))
            tr_header.addElement(tc_ct)

            tc_tpt = TableCell()
            tc_tpt.addElement(P(text=(None if cc == 0 else float(ct) / cc)))
            tr_header.addElement(tc_tpt)

            tc_nfl = TableCell()
            tc_nfl.addElement(P(text=func))
            tr_header.addElement(tc_nfl)
            table.addElement(tr_header)

        spreadsheet.spreadsheet.addElement(table)
        tmp_ods = tempfile.mktemp('.ods', 'stats')
        spreadsheet.save(tmp_ods, False)
        data = open(tmp_ods).read()
        os.remove(tmp_ods)
        return data
示例#22
0
def odsResponse(inscriptions, noninscrits):
    """
    fabrique un objet de type HttpResponse qui comporte un tableur au format
    ODS, avec les exportations d'une "barrette" d'AP.    
    @param inscriptions un objet issu de Inscription.objects.all()
    @param noninscrits une liste d'Etudiants
    @return un objet de type HttpResponse
    """
    response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
    now=timezone.now()
    filename="aperho-{}.ods".format(now.strftime("%Y%m%d-%H%M"))
    response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
    doc = OpenDocumentSpreadsheet()
    # 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"))
    doc.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"))
    doc.automaticstyles.addElement(widthshort)

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

    # Start the table, and describe the columns
    table = Table(name="Inscriptions")
    table.addElement(TableColumn(numbercolumnsrepeated=3,stylename=widthwide))
    tr = TableRow()
    table.addElement(tr)
    for title in ['id', 'Eleve_nom', 'Eleve_prenom', 'Eleve_classe', 'Professeur', 'Salle', 'Heure', 'Duree', 'Public_designe', 'Resume','Detail','Autres']:
        tc = TableCell()
        tr.addElement(tc)
        p = P(stylename=tablecontents,text=title)
        tc.addElement(p)
    for i in inscriptions:
        tr = TableRow()
        table.addElement(tr)
        for val in [i.pk, i.etudiant.nom, i.etudiant.prenom, i.etudiant.classe, i.cours.enseignant.nom, i.cours.enseignant.salle, i.cours.horaire, i.cours.formation.duree, i.cours.formation.public_designe, i.cours.formation.titre, i.cours.formation.contenu]:
            tc = TableCell()
            tr.addElement(tc)
            p = P(stylename=tablecontents,text=str(val))
            tc.addElement(p)
        ## write something in the last column (Autres)
        tc = TableCell()
        tr.addElement(tc)
        p = P(stylename=tablecontents,text=rdvOrientation(i))
        tc.addElement(p)
    for e in noninscrits:
        tr = TableRow()
        table.addElement(tr)
        for val in [0, e.nom, e.prenom, e.classe, '', '', '', '', '', '', '','']:
            tc = TableCell()
            tr.addElement(tc)
            p = P(stylename=tablecontents,text=str(val))
            tc.addElement(p)
    doc.spreadsheet.addElement(table)
    output=BytesIO()
    doc.save(output)
    response.write(output.getvalue())
    return response
示例#23
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)
示例#24
0
	def btExportarClick(self, widget):
	
		count = self.tvSolicitudes.get_selection().count_selected_rows()

		#Exportamos todo el treeview si no se han seleccionado filas.
		if count == 0:
			self.tvSolicitudes.get_selection().select_all()

			tree,iter = self.tvSolicitudes.get_selection().get_selected_rows()
		
			textdoc = OpenDocumentSpreadsheet()
							
			# Start the table, and describe the columns
			table = Table(name="Solicitudes")
			
			for i in iter: #esto funciona aquí, porque no voy eliminando filas del treeview. Por eso en el botón eliminar tuve que hacerlo distinto.
				expediente = tree.get_value(tree.get_iter(i), 1)
				persona = tree.get_value(tree.get_iter(i), 4)
				fecha = tree.get_value(tree.get_iter(i), 0)
				caja = tree.get_value(tree.get_iter(i), 2)
				lugar = tree.get_value(tree.get_iter(i), 3)
				# Create a row (same as <tr> in HTML)
				tr = TableRow()
				table.addElement(tr)
				# Create a cell 
				cell = TableCell()
				cell.addElement(P(text=expediente)) # The current displayed value
				tr.addElement(cell)
				cell4 = TableCell()
				cell4.addElement(P(text=caja))
				tr.addElement(cell4)
				cell5 = TableCell()
				cell5.addElement(P(text=lugar))
				tr.addElement(cell5)
				cell2 = TableCell()
				cell2.addElement(P(text=persona))
				tr.addElement(cell2)
				cell3 = TableCell()
				cell3.addElement(P(text=fecha))
				tr.addElement(cell3)

		#exportamos las filas seleccionadas
		else:

			tree,iter = self.tvSolicitudes.get_selection().get_selected_rows()
			# ret = []
			# for i in iter:
			# 	ret.append(tree.get_value(tree.get_iter(i), 0))

			textdoc = OpenDocumentSpreadsheet()
							
			# Start the table, and describe the columns
			table = Table(name="Solicitudes")
			
			for i in iter: #esto funciona aquí, porque no voy eliminando filas del treeview. Por eso en el botón eliminar tuve que hacerlo distinto.
				expediente = tree.get_value(tree.get_iter(i), 1)
				persona = tree.get_value(tree.get_iter(i), 4)
				fecha = tree.get_value(tree.get_iter(i), 0)
				caja = tree.get_value(tree.get_iter(i), 2)
				lugar = tree.get_value(tree.get_iter(i), 3)
				# Create a row (same as <tr> in HTML)
				tr = TableRow()
				table.addElement(tr)
				# Create a cell 
				cell = TableCell()
				cell.addElement(P(text=expediente)) # The current displayed value
				tr.addElement(cell)
				cell4 = TableCell()
				cell4.addElement(P(text=caja))
				tr.addElement(cell4)
				cell5 = TableCell()
				cell5.addElement(P(text=lugar))
				tr.addElement(cell5)
				cell2 = TableCell()
				cell2.addElement(P(text=persona))
				tr.addElement(cell2)
				cell3 = TableCell()
				cell3.addElement(P(text=fecha))
				tr.addElement(cell3)

			
		textdoc.spreadsheet.addElement(table)
		textdoc.save("Solicitudes_de_Expediente.ods")

	
		if sys.platform == 'linux2':
			os.system("xdg-open Solicitudes_de_Expediente.ods &")
		else:
			os.system("start soffice --calc Solicitudes_de_Expediente.ods &")
示例#25
0
        table.addElement(tr)

        addcell(tr, account[0]['code'], lestyle)
        addcell(tr, account[0]['name'], lestyle)
        addcell(tr, account[0]['type'], lestyle)
        addcell(tr, len(search_child), lestyle)
        addcell(tr, account[0]['balance'], lestyle)
        #            print account[0]['code'],account[0]['name'].encode('utf-8')," "*(65-len(account[0]['name']))," type : ",account[0]['type'],' enfants : ', len(search_child),account[0]['balance']

        for child_id in search_child:
            account = sock.execute(base, uid, password, 'account.account', 'read', [child_id],
                                   ['code', 'name', 'type', 'balance'])
            search_child = sock.execute(base, uid, password, 'account.account', 'search',
                                        [('active', 'in', ('True', 'False')), ('parent_id', '=', child_id)], 0,
                                        1000)
            row += 1
            tr = TableRow()
            table.addElement(tr)

            addcell(tr, "", lestyle)
            addcell(tr, account[0]['code'], lestyle)
            addcell(tr, account[0]['name'], lestyle)
            addcell(tr, account[0]['type'], lestyle)
            addcell(tr, len(search_child), lestyle)
            addcell(tr, account[0]['balance'], lestyle)
            #print "\t",account[0]['code'],account[0]['name'].encode('utf-8')," "*(65-len(account[0]['name']))," type : ",account[0]['type'],' enfants : ', len(search_child),account[0]['balance']

if trouve:
    calc.spreadsheet.addElement(table)
calc.save('/home/evernichon/controle_vue', True)
示例#26
0
    def getValues(self, **kw):
        """
        a routine to get measured values as a useful file
        @param kw keywords; allowed keywords are:
        - mode: the way you want to get the values
        The default mode is "ascii", which means that
        values are formated as ascii lines (space-separated numbers).
        <BR>
        Other supported modes are not yet implemented
        @return a stream with the relevant MIMEtype.
        """
        filename="values-{0}".format(time.strftime("%Y-%m-%d_%H_%M_%S"))
        if 'mode' in kw:
            mode=kw['mode']
        else:
            #mode='ascii'
            mode='ods'
        if mode=="ascii":
            ## define response headers
            cherrypy.response.headers["Content-Type"]="text/ascii;charset=utf-8"
            cherrypy.response.headers['Content-Disposition'] = 'attachment; filename={}.txt'.format(filename)
            ## send the data
            if self.mtype=='t,v':
                result=""
                t,v = self.measurements
                for i in range(len(t)):
                    result+="{0:f} {1:f}\n".format(t[i], v[i])
                return result
            else:
                return "mode = '%s', measurement type '%s' not supported." %(mode, self.mtype)
        elif mode=="ods":
            ## define response headers
            cherrypy.response.headers["Content-Type"]="application/vnd.oasis.opendocument.spreadsheet"
            cherrypy.response.headers['Content-Disposition'] = 'attachment; filename={}.ods'.format(filename)
            ## send the data
            if self.mtype=='t,v':
                doc = OpenDocumentSpreadsheet()
                # Start the table, and describe the columns
                table = Table(name="Expeyes-Jr {0}".format(time.strftime("%Y-%m-%d %Hh%Mm%Ss")))

                ## column titles
                tr = TableRow()
                table.addElement(tr)
                tc = TableCell()
                tr.addElement(tc)
                p = P(text='t (ms)')
                tc.addElement(p)

                tc = TableCell()
                tr.addElement(tc)
                input=self.inp
                for name in ExpPage.expeyes_inputs:
                    if ExpPage.expeyes_inputs[name]== self.inp:
                        input=name
                        break
                p = P(text=input+' (V)')
                tc.addElement(p)

                ## write values
                t,v=self.measurements
                for i in range(len(t)):
                    tr = TableRow()
                    table.addElement(tr)
                    tc = TableCell(valuetype="float", value=str(t[i]))
                    tr.addElement(tc)

                    tc = TableCell(valuetype="float", value=str(v[i]))
                    tr.addElement(tc)

                doc.spreadsheet.addElement(table)
                result=io.BytesIO()
                doc.save(result)
                return result.getvalue() 
            else:
                return "mode = '%s', measurement type '%s' not supported." %(mode, self.mtype)
        return "non-supported mode %s" %mode
示例#27
0
if number_rows_spanned > 1:
	first_cell.setAttribute("numberrowsspanned", number_rows_spanned)

for error in errors:
	tr = TableRow()
	tc = TableCell()
	tc.addElement(P(text=error))
	table.addElement(tr)
	tr.addElement(tc)

for examinee in undefined:
	tr = TableRow()
	table.addElement(tr)
	tc = TableCell(stylename=middle_center)
	tr.addElement(tc)
	tc.addElement(P(text=undefined[examinee][0]))
	tc = TableCell(stylename=middle_center)
	tr.addElement(tc)
	tc = TableCell(stylename=middle_left)
	tr.addElement(tc)
	tc.addElement(P(text=examinee))
	for examiner in homogenize(undefined[examinee][1]):
		tc = TableCell(stylename=middle_center)
		tr.addElement(tc)
		tc.addElement(P(text=examiner))

output.spreadsheet.addElement(table)
name, ext = splitext(argv[1])
output.save(name+"-timetable"+ext)

	def btExportarClick(self, widget):
	
		count = self.tvSolicitudes.get_selection().count_selected_rows()

		#Exportamos todo el treeview si no se han seleccionado filas.
		if count == 0:
			self.tvSolicitudes.get_selection().select_all()

			tree,iter = self.tvSolicitudes.get_selection().get_selected_rows()
		
			textdoc = OpenDocumentSpreadsheet()
							
			# Start the table, and describe the columns
			table = Table(name="Solicitudes")
			
			for i in iter: #esto funciona aquí, porque no voy eliminando filas del treeview. Por eso en el botón eliminar tuve que hacerlo distinto.
				expediente = tree.get_value(tree.get_iter(i), 1)
				persona = tree.get_value(tree.get_iter(i), 4)
				fecha = tree.get_value(tree.get_iter(i), 0)
				caja = tree.get_value(tree.get_iter(i), 2)
				lugar = tree.get_value(tree.get_iter(i), 3)
				# Create a row (same as <tr> in HTML)
				tr = TableRow()
				table.addElement(tr)
				# Create a cell 
				cell = TableCell()
				cell.addElement(P(text=expediente)) # The current displayed value
				tr.addElement(cell)
				cell4 = TableCell()
				cell4.addElement(P(text=caja))
				tr.addElement(cell4)
				cell5 = TableCell()
				cell5.addElement(P(text=lugar))
				tr.addElement(cell5)
				cell2 = TableCell()
				cell2.addElement(P(text=persona))
				tr.addElement(cell2)
				cell3 = TableCell()
				cell3.addElement(P(text=fecha))
				tr.addElement(cell3)

		#exportamos las filas seleccionadas
		else:

			tree,iter = self.tvSolicitudes.get_selection().get_selected_rows()
			# ret = []
			# for i in iter:
			# 	ret.append(tree.get_value(tree.get_iter(i), 0))

			textdoc = OpenDocumentSpreadsheet()
							
			# Start the table, and describe the columns
			table = Table(name="Solicitudes")
			
			for i in iter: #esto funciona aquí, porque no voy eliminando filas del treeview. Por eso en el botón eliminar tuve que hacerlo distinto.
				expediente = tree.get_value(tree.get_iter(i), 1)
				persona = tree.get_value(tree.get_iter(i), 4)
				fecha = tree.get_value(tree.get_iter(i), 0)
				caja = tree.get_value(tree.get_iter(i), 2)
				lugar = tree.get_value(tree.get_iter(i), 3)
				# Create a row (same as <tr> in HTML)
				tr = TableRow()
				table.addElement(tr)
				# Create a cell 
				cell = TableCell()
				cell.addElement(P(text=expediente)) # The current displayed value
				tr.addElement(cell)
				cell4 = TableCell()
				cell4.addElement(P(text=caja))
				tr.addElement(cell4)
				cell5 = TableCell()
				cell5.addElement(P(text=lugar))
				tr.addElement(cell5)
				cell2 = TableCell()
				cell2.addElement(P(text=persona))
				tr.addElement(cell2)
				cell3 = TableCell()
				cell3.addElement(P(text=fecha))
				tr.addElement(cell3)

			
		textdoc.spreadsheet.addElement(table)
		textdoc.save("Solicitudes_de_Expediente.ods")

	
		if sys.platform == 'linux2':
			os.system("xdg-open Solicitudes_de_Expediente.ods &")
		else:
			os.system("start soffice --calc Solicitudes_de_Expediente.ods &")
示例#29
0
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(name=sqltable)
#table.addElement(TableColumn(numbercolumnsrepeated=4,stylename=widthshort))
#table.addElement(TableColumn(numbercolumnsrepeated=3,stylename=widthwide))

cx = sqlite.connect(sqldb)
cu = cx.cursor()
cu.execute("select * from %s" % sqltable)
for row in cu.fetchall():
    tr = TableRow()
    table.addElement(tr)
    for val in row:
        tc = TableCell()
        tr.addElement(tc)
        if type(val) == type(''):
	    textval = unicode(val,'utf-8')
        else:
            textval = str(val)
        p = P(stylename=tablecontents,text=textval)
        tc.addElement(p)

cx.close()

textdoc.spreadsheet.addElement(table)
textdoc.save(sqltable, True)

示例#30
0
    def write_report_ods(self,
                         out_file: str,
                         header_color: str = "#66ffff") -> None:
        """
        Writes a report of all the events in the ics file as an ods. Is possible to optionally specify a background color for the header
        :param out_file (string): path for the output ods file
        :param header_color (string): background color for the header as hexadecimal (e.g. "#66ffff")
        """
        textdoc = OpenDocumentSpreadsheet()

        table = Table(name="Events")

        # Header
        ceX = Style(name="ceX", family="table-cell")
        ceX.addElement(
            TableCellProperties(backgroundcolor=header_color,
                                border="0.74pt solid #000000"))
        textdoc.styles.addElement(ceX)

        tr = TableRow()
        table.addElement(tr)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="title"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="begin"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="end"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="duration"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="description"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="created"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="location"))
        tr.addElement(cell)
        cell = TableCell(valuetype="string", stylename="ceX")
        cell.addElement(P(text="url"))
        tr.addElement(cell)

        # Content
        for ev in self.my_Calendar.events:
            tr = TableRow()
            (title, begin, end, duration, uid, description, created, location,
             url, transparent) = self.__get_fields__(ev)
            table.addElement(tr)
            cell = TableCell(valuetype="string")
            cell.addElement(P(text=title))
            tr.addElement(cell)
            cell = TableCell()
            cell.addElement(P(text=begin.format('YYYY-MM-DD HH:mm:ss ZZ')))
            tr.addElement(cell)
            cell = TableCell()
            cell.addElement(P(text=end.format('YYYY-MM-DD HH:mm:ss ZZ')))
            tr.addElement(cell)
            cell = TableCell()
            cell.addElement(P(text=str(duration)))
            tr.addElement(cell)
            cell = TableCell(valuetype="string")
            cell.addElement(P(text=description))
            tr.addElement(cell)
            cell = TableCell()
            cell.addElement(P(text=created.format('YYYY-MM-DD HH:mm:ss ZZ')))
            tr.addElement(cell)
            cell = TableCell(valuetype="string")
            cell.addElement(P(text=location))
            tr.addElement(cell)
            cell = TableCell()
            link = A(type="simple", href=url, text=url)
            p = P()
            p.addElement(link)
            cell.addElement(p)
            tr.addElement(cell)

        textdoc.spreadsheet.addElement(table)
        textdoc.save(out_file)
示例#31
0
    if upd: 
        table_media = None
        table_desvio = None
        try: 
            doc = load(out_file + ".ods")
        except: 
            print "File not found? (%s)" % (out_file + ".ods")
            sys.exit(2)
        for sheet in doc.getElementsByType(Table)[:]:
            if sheet.attributes['table:name'] == db_name + "_media":
                table_media = sheet 
            if sheet.attributes['table:name'] == db_name + "_desvio": 
                table_desvio = sheet 
        if not (table_media and table_desvio):
            table_media = Table(name=db_name + "_media")
            table_desvio = Table(name=db_name + "_desvio")
            make_body(dir,desc)
            doc.spreadsheet.addElement(table_media)
            doc.spreadsheet.addElement(table_desvio)
        else:
            make_body(dir,desc)
        doc.save(out_file, True)
    else: 
        doc = OpenDocumentSpreadsheet()
        table_media = Table(name=db_name + "_media")
        table_desvio = Table(name=db_name + "_desvio")
        make_body(dir,desc)
        doc.spreadsheet.addElement(table_media)
        doc.spreadsheet.addElement(table_desvio)
        doc.save(out_file, True)
示例#32
0
class oopricing1(StdOutputParams, ExecutorTopicContinuum,
                 CreateMakeDependencies):

    def __setup_coord_lookup(self):
        '''Because at some points a requirement will be rendered in a row
           and at some other points as a column, there is the need to
           access the used cell addresses from integers.
           This function creates a map to easily acces the column name by
           the column index: 0->A, 1->B, ..., 26->Z, 27->AA, ...
           Note: This currently limits the number of requirements which can
           be handled with this output module to about 700. If there is a
           need for more requirements, this can be easily extended.'''
        alpha = 'abcdefghijklmnopqrstuvwxyz'.upper()
        pairs = [''.join((x, y)) for x in alpha \
                     for y in [''] + [z for z in alpha]]
        self.__sscoords = sorted(pairs, key=len)

    def __init__(self, oconfig):
        '''Create a oopricing output object.'''
        tracer.debug("Called.")
        StdOutputParams.__init__(self, oconfig)
        CreateMakeDependencies.__init__(self)
        self.doc_styles = {}
        self.__used_vcs_id = None
        self.__setup_coord_lookup()

    def topic_continuum_sort(self, vcs_commit_ids, topic_sets):
        '''Because oopricing1 can only one topic continuum,
           the latest (newest) is used.'''
        self.__used_vcs_id = vcs_commit_ids[-1]
        return [ topic_sets[vcs_commit_ids[-1].get_commit()] ]


    def __create_meta(self):
        '''Create the meta-information for the document.'''
        m = odf.meta.Generator(text="rmtoo")
        self.__calcdoc.meta.addElement(m)
        m = odf.dc.Title(text="Requirements Pricing")
        self.__calcdoc.meta.addElement(m)
        m = odf.meta.UserDefined(name="Version",
                                 text=self.__used_vcs_id)
        self.__calcdoc.meta.addElement(m)
        m = odf.meta.UserDefined(name="Generator", text="rmtoo")
        self.__calcdoc.meta.addElement(m)


    ### Functions handling style

    def __create_styles_table_cell(self):
        # Bold
        s = odf.style.Style(name="tc-bold", family="table-cell")
        s.addElement(
            odf.style.TextProperties(fontweight="bold", fontsize="12pt"))
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["tc-bold"] = s

        # Bold with blue background for header
        s = odf.style.Style(name="tc-bold-blue", family="table-cell")
        s.addElement(
            odf.style.TextProperties(fontweight="bold", fontsize="12pt"))
        s.addElement(
            odf.style.TableCellProperties(backgroundcolor="#99ccff"))
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["tc-bold-blue"] = s

        # Shrink-to-fit
        s = odf.style.Style(name="tc-shrink-to-fit", family="table-cell")
        s.addElement(
            odf.style.TableCellProperties(shrinktofit="true"))
        s.addElement(odf.style.TableCellProperties(cellprotect="none",
                                                   printcontent="true"))
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["tc-shrink-to-fit"] = s

    def __create_styles_table_column(self):
        '''The different column style differ only in the columnwidth.'''
        colstyles = {
            "col-comment": "10in",
            "col-days": "0.5in",
            "col-dayrate": "0.65in",
            "col-compliant": "0.75in",
            "col-material": "0.8in",
            "col-sum": "0.9in",
            "col-ids": "1.2in",
            "col-name": "2.25in",
            "col-supplier": "0.75in",
            }

        # The sorted() is done to get always the same XML document -
        # which is important for comparison in tests.
        for name, size in sorted(colstyles.iteritems()):
            s = odf.style.Style(name=name, family="table-column")
            s.addElement(
                odf.style.TableColumnProperties(columnwidth=size))
            self.__calcdoc.automaticstyles.addElement(s)
            self.doc_styles[name] = s

    def __create_styles_currency(self):
        '''Column Style for Euro: only full Euros.'''
        # The positive part
        s = odf.number.CurrencyStyle(name="cs-euro-positive",
                                     volatile="true")
        s.addElement(odf.number.Number(
                decimalplaces="0", grouping="true", minintegerdigits="1"))
        s.addElement(odf.number.Text(text=" "))
        s.addElement(odf.number.CurrencySymbol(
                text=u"€", country="DE", language="de"))
        self.__calcdoc.styles.addElement(s)
        # This is the negative part: there is the decision, which one
        # is used.
        s = odf.number.CurrencyStyle(name="cs-euro")
        s.addElement(odf.number.Text(text="-"))
        s.addElement(odf.number.Number(
                decimalplaces="0", grouping="true", minintegerdigits="1"))
        s.addElement(odf.number.Text(text=" "))
        s.addElement(odf.number.CurrencySymbol(
                text=u"€", country="DE", language="de"))
        s.addElement(odf.style.Map(
                applystylename="cs-euro-positive", condition="value()>=0"))
        self.__calcdoc.styles.addElement(s)

        # This is the one for the read-only modules
        s = odf.style.Style(name="col-euro", family="table-cell",
                            datastylename="cs-euro")
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["col-euro"] = s

        # And the same for read-write.
        s = odf.style.Style(name="col-euro-rw", family="table-cell",
                            datastylename="cs-euro")
        s.addElement(odf.style.TableCellProperties(cellprotect="none",
                                                   printcontent="true"))
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["col-euro-rw"] = s

    def __create_styles_int(self):
        '''Number as used for days count.'''
        s = odf.number.NumberStyle(name="ns-int")
        s.addElement(odf.number.Number(
                decimalplaces="0", minintegerdigits="1"))
        self.__calcdoc.automaticstyles.addElement(s)

        # The version for read-only.
        s = odf.style.Style(name="col-int", family="table-cell",
                            datastylename="ns-int")
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["col-int"] = s

        # And the same for rw.
        s = odf.style.Style(name="col-int-rw", family="table-cell",
                            datastylename="ns-int")
        s.addElement(odf.style.TableCellProperties(cellprotect="none",
                                                   printcontent="true"))
        self.__calcdoc.automaticstyles.addElement(s)
        self.doc_styles["col-int-rw"] = s

    def __create_styles(self):
        '''There is the need to apply some styles.'''
        # There is the need for many different styles.
        self.__create_styles_table_cell()
        self.__create_styles_table_column()
        self.__create_styles_currency()
        self.__create_styles_int()

    def topic_set_pre(self, topics_set):
        '''Document setup and output.
           Because for this document a very specific sort order
           must be implemented, everything must be done here explicitly -
           the executor interface can only partially be used.'''
        self.__calcdoc = OpenDocumentSpreadsheet()
        self.__create_meta()
        self.__create_styles()

    def topic_set_post(self, topics_set):
        '''Document storage.'''
        self.__calcdoc.save(self._output_filename, True)


    # Sheet creation functions.

    def __create_costs_sheet(self, sreqs):
        sheet = odf.table.Table(name="Costs", protected="true")
        self.create_form(sheet, sreqs)
        self.create_costs_column_styles(sheet)
        self.create_costs_header(sheet, sreqs[0])
        self.create_costs_content(sheet, sreqs)
        self.__calcdoc.spreadsheet.addElement(sheet)

    def __create_deps_sheet(self, sreqs):
        sheet = odf.table.Table(name="Deps") #, protected="true")
        self.create_reqs_ids_row(sheet, sreqs)
        # The second row is where all the results will be inserted.
        # Therefore put in each one a none.
        tr = odf.table.TableRow()
        for _ in sreqs:
            self.create_text_cell(tr, "none")
        sheet.addElement(tr)
        # The third row contains the indices of the requirement
        # which is chosen as the dependent one.
        tr = odf.table.TableRow()
        for req in sreqs:
            tc = odf.table.TableCell()
            if req.get_incoming_cnt() > 0:
                # By default, the chosen is the first one.
                p = odf.text.P(text=req.get_iter_incoming().next().get_name())
                tc.addElement(p)
            tr.addElement(tc)
        sheet.addElement(tr)

        self.create_empty_row(sheet)
        # Output all the dependent requirements
        self.create_deps_dependent(sheet, sreqs)
        self.__calcdoc.spreadsheet.addElement(sheet)

    def __create_sums_sheet(self, sreqs):
        self.create_one_sums_sheet(self.__calcdoc, sreqs, "SumRate", "L")
        self.create_one_sums_sheet(self.__calcdoc, sreqs, "SumMat", "M")

    def __create_constants_sheet(self):
        sheet = odf.table.Table(name="Constants", protected="true")
        # This is the list where the requirement compliance gets it
        # values from. 
        for r in ["none", "partial", "fully"]:
            tr = odf.table.TableRow()
            tc = odf.table.TableCell()
            p = odf.text.P(text=r)
            tc.addElement(p)
            tr.addElement(tc)
            sheet.addElement(tr)
        self.__calcdoc.spreadsheet.addElement(sheet)

    # This is added to get all the results in one point (sheet)
    # which makes it easier to handle the output.
    def __create_result_sheet(self, sreqs):
        sheet = odf.table.Table(name="Results", protected="true")
        i = 0
        for req in sreqs:
            tr = odf.table.TableRow()
            self.create_result_one_req(tr, req, i)
            sheet.addElement(tr)
            i += 1
        self.__calcdoc.spreadsheet.addElement(sheet)

    def requirement_set_pre(self, requirement_set):
        '''The output of all the content.'''

        # Because of a problem with the current OpenOffice versions,
        # there is the need to sometimes arrange requirements as rows
        # and sometimes as columns:
        # It is not possible to define the range of a list input as a
        # row: it must be a column.
        # The order dictionary holds the number - which can be
        # computed in a row or column.
        def create_reqs_index(srqes):
            sreqs_index = {}
            cnt = 0
            for req in sreqs:
                sreqs_index[req] = cnt
                cnt += 1
            return sreqs_index

        sreqs = topological_sort(requirement_set)

        # Create the row / column index of each requirement
        self.sreqs_index = create_reqs_index(sreqs)

        # Create and save the document
        self.__create_costs_sheet(sreqs)
        self.__create_deps_sheet(sreqs)
        self.__create_sums_sheet(sreqs)
        self.__create_constants_sheet()
        self.__create_result_sheet(sreqs)

    def cmad_topic_continuum_pre(self, _):
        '''Write out the one and only dependency to all the requirements.'''
        tracer.debug("Called.")
        CreateMakeDependencies.write_reqs_dep(self._cmad_file,
                                              self._output_filename)

    #################################################################
    ### 2nd level functions
    ###

    ### helper functions

    # Create an empty row
    @staticmethod
    def create_empty_row(sheet):
        tr = odf.table.TableRow()
        sheet.addElement(tr)

    @staticmethod
    def create_empty_cell(row):
        tc = odf.table.TableCell()
        row.addElement(tc)

    @staticmethod
    def create_empty_currency_cell(row):
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            stylename="col-euro-rw")
        tc.addElement(odf.text.P())
        row.addElement(tc)

    @staticmethod
    def create_empty_currency_cell_ro(row):
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            stylename="col-euro")
        tc.addElement(odf.text.P())
        row.addElement(tc)

    @staticmethod
    def create_empty_int_cell(row):
        tc = odf.table.TableCell(
            valuetype="float", value="0",
            stylename="col-int-rw")
        tc.addElement(odf.text.P())
        row.addElement(tc)

    # Create the first row in the deps or sums sheet: all the ids
    @staticmethod
    def create_reqs_ids_row(sheet, sreqs):
        tr = odf.table.TableRow()
        for req in sreqs:
            tc = odf.table.TableCell()
            p = odf.text.P(text=req.get_name())
            tc.addElement(p)
            tr.addElement(tc)
        sheet.addElement(tr)

    # Creates a text cell with the given text. Optional a style can be
    # specified. 
    @staticmethod
    def create_text_cell(table_row, text, style=None):
        if style != None:
            tc = odf.table.TableCell(stylename=style)
        else:
            tc = odf.table.TableCell()

        if text != None:
            p = odf.text.P(text=text)
            tc.addElement(p)
        table_row.addElement(tc)



    ### Functions handling costs

    def create_costs_column_styles(self, sheet):
        # 1 Colum: Ids
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-ids"])
        sheet.addElement(tc)
        # 2 Colum: Name
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-name"])
        sheet.addElement(tc)
        # 3 Colum: Compliant
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-compliant"])
        sheet.addElement(tc)
        # 4 Colum: Costs-dayrate
        tc = odf.table.TableColumn(
            stylename=self.doc_styles["col-dayrate"],
            defaultcellstylename=self.doc_styles["col-euro"])
        sheet.addElement(tc)
        # 5 Colum: Costs-days
        tc = odf.table.TableColumn(
            stylename=self.doc_styles["col-days"],
            defaultcellstylename=self.doc_styles["col-int"])
        sheet.addElement(tc)
        # 6 Colum: Costs-material
        tc = odf.table.TableColumn(
            stylename=self.doc_styles["col-material"],
            defaultcellstylename=self.doc_styles["col-euro"])
        sheet.addElement(tc)
        # 7 Colum: Costs-sum
        tc = odf.table.TableColumn(
            stylename=self.doc_styles["col-sum"],
            defaultcellstylename=self.doc_styles["col-euro"])
        sheet.addElement(tc)
        # 8 Colum: Dependent from
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-ids"])
        sheet.addElement(tc)
        # 9-14 Sum columns
        for _ in ["dep-rate", "dep-mat", "dep-sum",
                  "ovl-rate", "ovl-mat", "ovl-sum"]:
            tc = odf.table.TableColumn(
                stylename=self.doc_styles["col-sum"],
                defaultcellstylename=self.doc_styles["col-euro"])
            sheet.addElement(tc)
        # 15 Supplier
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-supplier"])
        sheet.addElement(tc)
        # 16 Comment
        tc = odf.table.TableColumn(stylename=self.doc_styles["col-comment"])
        sheet.addElement(tc)

    def create_costs_header(self, sheet, req):
        # First is empty
        self.create_empty_row(sheet)
        # Second holds only the Overall sum
        tr = odf.table.TableRow()
        self.create_text_cell(tr, req.get_name(),
                              self.doc_styles["tc-bold"])
        sheet.addElement(tr)
        # Followed by an additionally empty line
        self.create_empty_row(sheet)
        # Table header line 1
        tr = odf.table.TableRow()
        for h in ["Id", "Name", "Compliant", "Costs for requirement",
                  None, None, None, "Dependent from",
                  "Costs of dependent", None, None,
                  "Overall sum", None, None, "Supplier", "Comment"]:
            self.create_text_cell(tr, h, self.doc_styles["tc-bold-blue"])
        sheet.addElement(tr)
        # Table header line 2
        tr = odf.table.TableRow()
        for h in [None, None, None, "dayrate",
                  "#days", "material", "sum", None,
                  "rate", "material", "sum",
                  "rate", "material", "sum", None, None]:
            self.create_text_cell(tr, h, self.doc_styles["tc-bold-blue"])
        sheet.addElement(tr)

    def create_costs_content(self, sheet, sreqs):
        i = 0
        for req in sreqs:
            tr = odf.table.TableRow()
            self.create_costs_content_req(tr, req, i)
            sheet.addElement(tr)
            i += 1

    def create_costs_content_req(self, tr, dnreq, i):
        req = dnreq.get_requirement()
        choi = i + DEPS_HEADER_LEN
        # First cell is the id
        self.create_text_cell(tr, dnreq.get_name())
        # Second cell is the name
        self.create_text_cell(tr, req.get_value("Name").get_content())
        # Third is the compliant
        tc = odf.table.TableCell()
        dc = odf.draw.Control(control="lbcompliant%s" % dnreq.get_name(),
                              zindex="0",
                              x="0.0in",
                              y="0.0in",
                              endcelladdress="Costs.C%d" % (choi + 1),
                              endx="0.75in",
                              endy="0.0in")
        tc.addElement(dc)
        tr.addElement(tc)
        # Three empty columns for costs
        self.create_empty_currency_cell(tr)
        self.create_empty_int_cell(tr)
        self.create_empty_currency_cell(tr)
        # Sum / factor of before ones
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            formula="oooc:=[.D%d]*[.E%d]+[.F%d]" % (choi, choi, choi))
        tr.addElement(tc)
        # Dependent on Chooser
        tc = odf.table.TableCell()
        # Do not do this for first cell.
        if dnreq.get_incoming_cnt() > 0:
            dc = odf.draw.Control(control="lbdependentfrom%s" % dnreq.get_name(),
                                  zindex="0",
                                  x="0.0in",
                                  y="0.0in",
                                  endcelladdress="Costs.H%d" % (choi + 1),
                                  endx="1.2in",
                                  endy="0.0in")
            tc.addElement(dc)
        tr.addElement(tc)

        # dependet rate and material
        # Do not do this for first cell.
        for sname in ["SumRate", "SumMat"]:
            if dnreq.get_outgoing_cnt() > 0:
                tc = odf.table.TableCell(
                    valuetype="currency", currency="EUR",
                    formula="oooc:=SUM([%s.%s2:%s.%s%d])" \
                        % (sname, self.__sscoords[i], sname, self.__sscoords[i],
                           (1 + dnreq.get_outgoing_cnt())))
                tr.addElement(tc)
            else:
                self.create_empty_currency_cell_ro(tr)

        # sum of dependent
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            formula="oooc:=[.I%d]+[.J%d]" % (choi, choi))
        tr.addElement(tc)

        # Overall rate
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            formula="oooc:=[.D%d]*[.E%d]+[.I%d]" % (choi, choi, choi))
        tr.addElement(tc)
        # Overall material
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            formula="oooc:=[.F%d]+[.J%d]" % (choi, choi))
        tr.addElement(tc)
        # Overall sum
        tc = odf.table.TableCell(
            valuetype="currency", currency="EUR",
            formula="oooc:=[.L%d]+[.M%d]" % (choi, choi))
        tr.addElement(tc)
        # Supplier
        tc = odf.table.TableCell(
            valuetype="string", stylename=self.doc_styles["tc-shrink-to-fit"])
        tr.addElement(tc)
        # Comment
        tc = odf.table.TableCell(
            valuetype="string", stylename=self.doc_styles["tc-shrink-to-fit"])
        tr.addElement(tc)

    ### Functions handling deps

    def create_deps_dependent(self, sheet, sreqs):
        # The number of the following rows depend on the maximum
        # number of incoming requirements.
        # This flags if there is something found with the current
        # index.
        i = 0
        while True:
            tr = odf.table.TableRow()
            index_used = False
            for req in sreqs:
                if req.get_incoming_cnt() > i:
                    tc = odf.table.TableCell()
                    # ToDo: Experimental
                    ## p = odf.text.P(text=req.incoming[i].name)
                    p = odf.text.P(text=req.get_iter_incoming().next().get_name())
                    tc.addElement(p)
                    tr.addElement(tc)
                    index_used = True
                else:
                    tc = odf.table.TableCell()
                    tr.addElement(tc)
            sheet.addElement(tr)
            if not index_used:
                break
            i += 1


    ### Functions handling sums

    # Create one sum sheet
    def create_one_sums_sheet(self, calcdoc, sreqs, name, colname):
        sheet = odf.table.Table(name=name, protected="true")
        self.create_reqs_ids_row(sheet, sreqs)

        i = 0
        while True:
            tr = odf.table.TableRow()
            index_used = False
            for req in sreqs:
                if req.get_outgoing_cnt() > i:
                    # This is somewhat complicated:
                    # If on the Costs sheet one direction is chosen,
                    # it is written to the deps sheet (row 3).
                    # If this row contains the name of the current
                    # requirment, it is chosen to be dependent and the
                    # overall costs of that requirement must go to the
                    # local list - which then is again summed over on
                    # the cost sheet.
                    
                    # ToDo: WHAT TO DO????????
                    
#                    tc = odf.table.TableCell(
#                        valuetype="currency", currency="EUR",
#                        formula='oooc:=IF([Deps.%s3]="%s";[Costs.%s%d];0)' %
#                        (self.__sscoords[self.sreqs_index[req.outgoing[i]]],
#                         req.name, colname,
#                         self.sreqs_index[req.outgoing[i]] + DEPS_HEADER_LEN))

                    tc = odf.table.TableCell(
                        valuetype="currency", currency="EUR",
                        formula='oooc:=IF([Deps.%s3]="%s";[Costs.%s%d];0)' %
                        (self.__sscoords[self.sreqs_index[req.get_iter_outgoing().next()]],
                         req.get_name(), colname,
                         self.sreqs_index[req.get_iter_outgoing().next()] + DEPS_HEADER_LEN))
                    tr.addElement(tc)
                    index_used = True
                else:
                    tc = odf.table.TableCell()
                    tr.addElement(tc)
            sheet.addElement(tr)
            if not index_used:
                break
            i += 1

        calcdoc.spreadsheet.addElement(sheet)


    ### Functions handling forms
    def create_form(self, calcdoc, sreqs):
        forms = odf.office.Forms(
            applydesignmode="false",
            automaticfocus="false")
        form = odf.form.Form(
            applyfilter="true",
            commandtype="table",
            controlimplementation="ooo:com.sun.star.form.component.Form",
            name="Standard",
            targetframe="",
            href="")

        # Listboxes for compliant
        i = 0
        for req in sreqs:
            lb = odf.form.Listbox(
                id="lbcompliant%s" % req.get_name(),
                boundcolumn="1",
                dropdown="yes",
                controlimplementation="ooo:com.sun.star.form.component.ListBox",
                linkedcell="Deps.%s2" % self.__sscoords[i],
                listlinkagetype="selection",
                name="ListBox Compliant %s" % req.get_name(),
                size="3",
                sourcecellrange="Constants.A1:Constants.A3"
                )
            lbproperties = odf.form.Properties()
            lbprop = odf.form.Property(
                propertyname="DefaultControl",
                stringvalue="com.sun.star.form.control.ListBox",
                valuetype="string")
            lbproperties.addElement(lbprop)
            # Default selection
            lstprop = odf.form.ListProperty(
                propertyname="DefaultSelection",
                valuetype="float")
            defaultval = odf.form.ListValue(stringvalue='0')
            lstprop.addElement(defaultval)
            lbproperties.addElement(lstprop)

            lb.addElement(lbproperties)

            form.addElement(lb)
            i += 1

        # Listboxes for dependent from
        i = 0
        for req in sreqs:
            # When there is only one entry in the list, there is no
            # need to have a dropdown list.
            ddown = "yes"
            if req.get_incoming_cnt() <= 1:
                ddown = "no"

            lb = odf.form.Listbox(
                id="lbdependentfrom%s" % req.get_name(),
                boundcolumn="1",
                dropdown="yes",
                controlimplementation="ooo:com.sun.star.form.component.ListBox",
                linkedcell="Deps.%s3" % self.__sscoords[i],
                listlinkagetype="selection",
                name="ListBox Dependet From %s" % req.get_name(),
                size="3",
                sourcecellrange="Deps.%s5:Deps.%s%d" % (
                    self.__sscoords[i], self.__sscoords[i], req.get_incoming_cnt() + 4)
                )
            lbproperties = odf.form.Properties()
            lbprop = odf.form.Property(
                propertyname="DefaultControl",
                stringvalue="com.sun.star.form.control.ListBox",
                valuetype="string")
            lbproperties.addElement(lbprop)
            # Default selection
            lstprop = odf.form.ListProperty(
                propertyname="DefaultSelection",
                valuetype="float")
            defaultval = odf.form.ListValue(stringvalue='0')
            lstprop.addElement(defaultval)
            lbproperties.addElement(lstprop)
            # Read only
            # When there is only one dependent requirement, it makes
            # no sense to have something which can be changed.
            # Therefore this should be readonly then.
            if req.get_incoming_cnt() <= 1:
                lstprop = odf.form.Property(
                    propertyname="ReadOnly",
                    valuetype="boolean",
                    booleanvalue="true")
                lbproperties.addElement(lstprop)

            lb.addElement(lbproperties)

            form.addElement(lb)
            i += 1

        forms.addElement(form)
        calcdoc.addElement(forms)

    ### Functions handling result sheet
    def create_result_one_req(self, tr, req, i):
        # 1 Id
        self.create_text_cell(tr, req.get_name())
        # 2 Compliance
        tc = odf.table.TableCell(
            valuetype="string",
            formula="oooc:=[Deps.%s2]" % self.__sscoords[i])
        tr.addElement(tc)
        # Prices
        for r in ["D", "E", "F"]:
            tc = odf.table.TableCell(
                valuetype="string",
                formula="oooc:=[Costs.%s%d]" % (r, i + DEPS_HEADER_LEN))
            tr.addElement(tc)
        # Dependent from
        tc = odf.table.TableCell(
            valuetype="string",
            formula="oooc:=[Deps.%s3]" % self.__sscoords[i])
        tr.addElement(tc)
        # Supplier
        tc = odf.table.TableCell(
            valuetype="string",
            formula="oooc:=[Costs.O%d]" % (i + DEPS_HEADER_LEN))
        tr.addElement(tc)
        # Comment
        tc = odf.table.TableCell(
            valuetype="string",
            formula="oooc:=[Costs.P%d]" % (i + DEPS_HEADER_LEN))
        tr.addElement(tc)
        if f_type == 'many2one':
            d = d and d[1] or ''
        elif f_type == 'many2many':
            d = ','.join(map(str, d))
        elif f_type == 'one2many':
            d = ','.join(map(str, d))

        if isinstance(d, int):
            tc = TableCell(valuetype="int", value=d)
        elif isinstance(d, float):
            tc = TableCell(valuetype="float", value=d)
        elif isinstance(d, bool):
            tc = TableCell(valuetype="bool", value=d)
        else:
            tc = TableCell(valuetype='string')

        tr.addElement(tc)
        if isinstance(d, unicode):
            p = P(stylename=tablecontents, text=d)
        else:
            p = P(stylename=tablecontents, text=unicode(str(d), 'utf-8'))
        tc.addElement(p)
    cpt += 1

textdoc.spreadsheet.addElement(table)
textdoc.save(opts.filename)


# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
示例#34
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 = u'-'))
      dcs.addElement(Month(style='long'))
      dcs.addElement(Text(text = u'-'))
      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 = unicode(escape(c.text), 'utf-8')))
        
        tr.addElement(tc)

    odfdoc.spreadsheet.addElement(table)
    odfdoc.save(filename)
示例#35
0
def create_ods(filename):
    doc = OpenDocumentSpreadsheet()
    # doc.spreadsheet.addElement(table)
    # doc.save(filename, True) # add "ods" as suffix
    doc.save(filename)  # not add "ods" as suffix
示例#36
0
# remove the .ods suffix if any, as ODF will ad one
m = re.match(r"^(.*)\.ods$", ofilename.strip())
if m:
    ofilename = m.group(1)

doc = OpenDocumentSpreadsheet()
# Start the table, and describe the columns
table = Table(name="Password")

f = open(ifilename, "r", encoding="latin-1")
for line in f:
    rec = line.strip().split(";")
    tr = TableRow()
    table.addElement(tr)
    for val in rec:
        m = re.match(r'"(.*)"', val)
        if m:
            val = m.group(1)
        isnumber, value = parseFloat(val)
        if isnumber:
            tc = TableCell(value=value, valuetype="float")
        else:
            tc = TableCell()
        tr.addElement(tc)
        p = P(text=val)
        tc.addElement(p)

doc.spreadsheet.addElement(table)
doc.save(ofilename, True)
示例#37
0
# 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(name="Password")
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()
    table.addElement(tr)
    for val in rec:
        tc = TableCell()
        tr.addElement(tc)
        p = P(stylename=tablecontents,text=unicode(val,PWENC))
        tc.addElement(p)

textdoc.spreadsheet.addElement(table)
textdoc.save("passwd.ods")
示例#38
0
# ODF Standard section 15.9.1
widthshort = Style(name="Wshort", family="table-column")
widthshort.addElement(TableColumnProperties(columnwidth="1.7cm"))
doc.automaticstyles.addElement(widthshort)

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

# chenyang20140702-start
# create style for big title
bigtitle = Style(name="Large number", family="table-cell")
bigtitle.addElement(TextProperties(fontfamily="WenQuanYi Micro Hei", fontsize="20pt", fontsizeasian="50pt"))
bigtitle.addElement(TableColumnProperties(columnwidth="17cm"))
doc.styles.addElement(bigtitle)
# chenyang20140702-end

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

# glue start
tr = TableRow()
table.addElement(tr)
cell(tr, "a部b门主c管", bigtitle)
# glue end

doc.spreadsheet.addElement(table)
doc.save("big_title", True)
示例#39
0
ns2.addElement(Number(decimalplaces="2", minintegerdigits="1", grouping="true"))
ns2.addElement(Map(condition="value()>=0", applystylename="positive-AUD"))
textdoc.styles.addElement(ns2)

# Create automatic style for the price cells.
moneycontents = Style(name="ce1", family="table-cell", parentstylename=tablecontents, datastylename="main-AUD")
textdoc.automaticstyles.addElement(moneycontents)

# Start the table, and describe the columns
table = Table(name="Currency colours")
# Create a column (same as <col> in HTML) Make all cells in column default to currency
table.addElement(TableColumn(stylename=widewidth, defaultcellstylename="ce1"))
# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create a cell with a negative value. It should show as red.
cell = TableCell(valuetype="currency", currency="AUD", value="-125")
cell.addElement(P(text=u"$-125.00")) # The current displayed value
tr.addElement(cell)

# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create another cell but with a positive value. It should show in black
cell = TableCell(valuetype="currency", currency="AUD", value="123")
cell.addElement(P(text=u"$123.00")) # The current displayed value
tr.addElement(cell)

textdoc.spreadsheet.addElement(table)
textdoc.save("currency.ods")
示例#40
0
    table.addElement(
        TableColumn(stylename=widewidth, defaultcellstylename="ce1"))

for row in xrange(1, MSIZE + 1):
    # Create a row (same as <tr> in HTML)
    tr = TableRow()
    table.addElement(tr)

    for col in xrange(1, MSIZE + 1):
        if (col == row):
            cell = TableCell(valuetype="string", stylename="cs1")
            cell.addElement(P(text=u"X"))  # The current displayed value
        elif (col < row):
            cell = TableCell(formula=u"=%s%s" % (lit(row), col),
                             valuetype="string",
                             stylename="cs2")
        else:
            cell = TableCell(valuetype="string", stylename="cs3")
            cell.addElement(P(text=u""))  # The current displayed value
        tr.addElement(cell)

tr = TableRow()
table.addElement(tr)
for col in xrange(1, MSIZE + 1):
    cell = TableCell(valuetype="string", stylename="cs4")
    cell.addElement(P(text=u"%s" % (col)))  # The current displayed value
    tr.addElement(cell)

textdoc.spreadsheet.addElement(table)
textdoc.save("keymatrix.ods")
示例#41
0
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(name=sqltable)
#table.addElement(TableColumn(numbercolumnsrepeated=4,stylename=widthshort))
#table.addElement(TableColumn(numbercolumnsrepeated=3,stylename=widthwide))

cx = sqlite.connect(sqldb)
cu = cx.cursor()
cu.execute("select * from %s" % sqltable)
for row in cu.fetchall():
    tr = TableRow()
    table.addElement(tr)
    for val in row:
        tc = TableCell()
        tr.addElement(tc)
        if type(val) == type(''):
            textval = unicode(val, 'utf-8')
        else:
            textval = str(val)
        p = P(stylename=tablecontents, text=textval)
        tc.addElement(p)

cx.close()

textdoc.spreadsheet.addElement(table)
textdoc.save(sqltable, True)
示例#42
0
class _ODSWriter(ExcelWriter):
    engine = "odf"
    supported_extensions = (".ods",)

    def __init__(
        self, path: str, engine: Optional[str] = None, mode: str = "w", **engine_kwargs
    ):
        from odf.opendocument import OpenDocumentSpreadsheet

        engine_kwargs["engine"] = engine

        if mode == "a":
            raise ValueError("Append mode is not supported with odf!")

        super().__init__(path, mode=mode, **engine_kwargs)

        self.book = OpenDocumentSpreadsheet()
        self._style_dict: Dict[str, str] = {}

    def save(self) -> None:
        """
        Save workbook to disk.
        """
        for sheet in self.sheets.values():
            self.book.spreadsheet.addElement(sheet)
        self.book.save(self.path)

    def write_cells(
        self,
        cells: List[ExcelCell],
        sheet_name: Optional[str] = None,
        startrow: int = 0,
        startcol: int = 0,
        freeze_panes: Optional[Tuple[int, int]] = None,
    ) -> None:
        """
        Write the frame cells using odf
        """
        from odf.table import Table, TableCell, TableRow
        from odf.text import P

        sheet_name = self._get_sheet_name(sheet_name)
        assert sheet_name is not None

        if sheet_name in self.sheets:
            wks = self.sheets[sheet_name]
        else:
            wks = Table(name=sheet_name)
            self.sheets[sheet_name] = wks

        if validate_freeze_panes(freeze_panes):
            assert freeze_panes is not None
            self._create_freeze_panes(sheet_name, freeze_panes)

        for _ in range(startrow):
            wks.addElement(TableRow())

        rows: DefaultDict = defaultdict(TableRow)
        col_count: DefaultDict = defaultdict(int)

        for cell in sorted(cells, key=lambda cell: (cell.row, cell.col)):
            # only add empty cells if the row is still empty
            if not col_count[cell.row]:
                for _ in range(startcol):
                    rows[cell.row].addElement(TableCell())

            # fill with empty cells if needed
            for _ in range(cell.col - col_count[cell.row]):
                rows[cell.row].addElement(TableCell())
                col_count[cell.row] += 1

            pvalue, tc = self._make_table_cell(cell)
            rows[cell.row].addElement(tc)
            col_count[cell.row] += 1
            p = P(text=pvalue)
            tc.addElement(p)

        # add all rows to the sheet
        for row_nr in range(max(rows.keys()) + 1):
            wks.addElement(rows[row_nr])

    def _make_table_cell_attributes(self, cell) -> Dict[str, Union[int, str]]:
        """Convert cell attributes to OpenDocument attributes

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        attributes : Dict[str, Union[int, str]]
            Dictionary with attributes and attribute values
        """
        attributes: Dict[str, Union[int, str]] = {}
        style_name = self._process_style(cell.style)
        if style_name is not None:
            attributes["stylename"] = style_name
        if cell.mergestart is not None and cell.mergeend is not None:
            attributes["numberrowsspanned"] = max(1, cell.mergestart)
            attributes["numbercolumnsspanned"] = cell.mergeend
        return attributes

    def _make_table_cell(self, cell) -> Tuple[str, Any]:
        """Convert cell data to an OpenDocument spreadsheet cell

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        pvalue, cell : Tuple[str, TableCell]
            Display value, Cell value
        """
        from odf.table import TableCell

        attributes = self._make_table_cell_attributes(cell)
        val, fmt = self._value_with_fmt(cell.val)
        pvalue = value = val
        if isinstance(val, bool):
            value = str(val).lower()
            pvalue = str(val).upper()
        if isinstance(val, datetime.datetime):
            value = val.isoformat()
            pvalue = val.strftime("%c")
            return (
                pvalue,
                TableCell(valuetype="date", datevalue=value, attributes=attributes),
            )
        elif isinstance(val, datetime.date):
            value = val.strftime("%Y-%m-%d")
            pvalue = val.strftime("%x")
            return (
                pvalue,
                TableCell(valuetype="date", datevalue=value, attributes=attributes),
            )
        else:
            class_to_cell_type = {
                str: "string",
                int: "float",
                float: "float",
                bool: "boolean",
            }
            return (
                pvalue,
                TableCell(
                    valuetype=class_to_cell_type[type(val)],
                    value=value,
                    attributes=attributes,
                ),
            )

    def _process_style(self, style: Dict[str, Any]) -> str:
        """Convert a style dictionary to a OpenDocument style sheet

        Parameters
        ----------
        style : Dict
            Style dictionary

        Returns
        -------
        style_key : str
            Unique style key for for later reference in sheet
        """
        from odf.style import (
            ParagraphProperties,
            Style,
            TableCellProperties,
            TextProperties,
        )

        if style is None:
            return None
        style_key = json.dumps(style)
        if style_key in self._style_dict:
            return self._style_dict[style_key]
        name = f"pd{len(self._style_dict)+1}"
        self._style_dict[style_key] = name
        odf_style = Style(name=name, family="table-cell")
        if "font" in style:
            font = style["font"]
            if font.get("bold", False):
                odf_style.addElement(TextProperties(fontweight="bold"))
        if "borders" in style:
            borders = style["borders"]
            for side, thickness in borders.items():
                thickness_translation = {"thin": "0.75pt solid #000000"}
                odf_style.addElement(
                    TableCellProperties(
                        attributes={f"border{side}": thickness_translation[thickness]}
                    )
                )
        if "alignment" in style:
            alignment = style["alignment"]
            horizontal = alignment.get("horizontal")
            if horizontal:
                odf_style.addElement(ParagraphProperties(textalign=horizontal))
            vertical = alignment.get("vertical")
            if vertical:
                odf_style.addElement(TableCellProperties(verticalalign=vertical))
        self.book.styles.addElement(odf_style)
        return name

    def _create_freeze_panes(
        self, sheet_name: str, freeze_panes: Tuple[int, int]
    ) -> None:
        """
        Create freeze panes in the sheet.

        Parameters
        ----------
        sheet_name : str
            Name of the spreadsheet
        freeze_panes : tuple of (int, int)
            Freeze pane location x and y
        """
        from odf.config import (
            ConfigItem,
            ConfigItemMapEntry,
            ConfigItemMapIndexed,
            ConfigItemMapNamed,
            ConfigItemSet,
        )

        config_item_set = ConfigItemSet(name="ooo:view-settings")
        self.book.settings.addElement(config_item_set)

        config_item_map_indexed = ConfigItemMapIndexed(name="Views")
        config_item_set.addElement(config_item_map_indexed)

        config_item_map_entry = ConfigItemMapEntry()
        config_item_map_indexed.addElement(config_item_map_entry)

        config_item_map_named = ConfigItemMapNamed(name="Tables")
        config_item_map_entry.addElement(config_item_map_named)

        config_item_map_entry = ConfigItemMapEntry(name=sheet_name)
        config_item_map_named.addElement(config_item_map_entry)

        config_item_map_entry.addElement(
            ConfigItem(name="HorizontalSplitMode", type="short", text="2")
        )
        config_item_map_entry.addElement(
            ConfigItem(name="VerticalSplitMode", type="short", text="2")
        )
        config_item_map_entry.addElement(
            ConfigItem(
                name="HorizontalSplitPosition", type="int", text=str(freeze_panes[0])
            )
        )
        config_item_map_entry.addElement(
            ConfigItem(
                name="VerticalSplitPosition", type="int", text=str(freeze_panes[1])
            )
        )
        config_item_map_entry.addElement(
            ConfigItem(name="PositionRight", type="int", text=str(freeze_panes[0]))
        )
        config_item_map_entry.addElement(
            ConfigItem(name="PositionBottom", type="int", text=str(freeze_panes[1]))
        )
示例#43
0
class Save_to_ods:
    def __init__(self):
        pass
    def make_style(self, tablename=date):
        #self.doc = load("themplate.ods")

        self.doc = OpenDocumentSpreadsheet()
        # Create a style for the table content. One we can modify
        # later in the word processor.
        self.font = FontFace( name="Times New Roman", fontadornments="Normal", fontfamilygeneric="roman", fontpitch="variable" )
        self.doc.fontfacedecls.addElement( self.font )

        self.root_style = Style(name="rootstyle", family="table-cell")
        self.root_style.addElement(
                TableCellProperties(
                    wrapoption="wrap",
                    verticalalign="middle",
                    padding="0.049cm",
                    ) )
        #self.root_style.addElement( TableRowProperties(breakbefore="auto", useoptimalrowheight="true",rowheight="3cm",  ) )
        #self.root_style.addElement(ParagraphProperties(numberlines="false", linenumber="0",))# marginleft="0.4cm"))
        self.root_style.addElement( TextProperties( fontname="Times New Roman", fontnameasian="Times New Roman", fontsize="10pt"))
        self.doc.styles.addElement( self.root_style )

        page = PageLayout( name="page" )
        self.doc.automaticstyles.addElement( page )
        page.addElement( PageLayoutProperties( margintop="0.499cm", marginbottom="0.499cm", marginleft="2cm", marginright="0.499cm", shadow="none", backgroundcolor="transparent", tablecentering="horizontal", writingmode="lr-tb") )


        self.head = Style(name="head", family="table-cell", parentstylename="rootstyle")
        self.head.addElement( TextProperties(fontweight="bold", fontweightasian="bold", fontsize="12pt"))
        self.doc.styles.addElement(self.head)

        self.tablehead = Style(name="tablehead", family="table-cell", parentstylename="rootstyle")
        self.tablehead.addElement( ParagraphProperties(numberlines="false", linenumber="0", textalign="center"))
        self.tablehead.addElement( TableCellProperties( border="0.004cm solid #000000", padding="0.199cm",  ) )
        self.tablehead.addElement( TextProperties(fontweight="bold", fontweightasian="bold", fontsize="12pt"))
        self.doc.styles.addElement(self.tablehead)

        self.tablecontents = Style(name="content", family="table-cell", parentstylename="rootstyle")
        self.tablecontents.addElement(
                TableCellProperties(
                    border="0.004cm solid #000000",
                    wrapoption="wrap",
                    verticalalign="middle",
                    ) )
        self.doc.styles.addElement(self.tablecontents)


        self.tablemanuf = Style(name="manuf", family="table-cell", parentstylename="rootstyle")
        self.tablemanuf.addElement(
                TableCellProperties(
                    border="0.013cm solid #000000",
                    backgroundcolor="#CCCCCC",
                    ) )
        self.tablemanuf.addElement(ParagraphProperties( textalign="center" ))
        self.tablemanuf.addElement( TextProperties(fontweight="bold", fontweightasian="bold", fontsize="14pt" ))
        self.doc.styles.addElement(self.tablemanuf)
        # 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
        widthname = Style(name="Wname", family="table-column")
        widthname.addElement(TableColumnProperties(columnwidth="5 cm"))
        self.doc.automaticstyles.addElement(widthname )

        widthdesc = Style(name="Wdesc", family="table-column")
        widthdesc.addElement(TableColumnProperties(columnwidth="11 cm",useoptimalcolumnwidth
        ="1"))
        self.doc.automaticstyles.addElement( widthdesc )

        widthcell = Style(name="Wcell", family="table-column")
        widthcell.addElement(TableColumnProperties(columnwidth="2.3 cm"))
        widthcell.addElement(ParagraphProperties(numberlines="false", linenumber="0", textalign="end"))
        self.doc.automaticstyles.addElement(widthcell)

        #>> Start the table, and describe the columns
        self.table = Table(name= tablename )
        self.table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=widthname))
        self.table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=widthdesc))
        self.table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=widthcell))
    def add_rows(self, _tuple, stylename):
        '''
        _tuple example

        (
        ('','',), # 1 row
        ('','','',), # 2 row
        )
        '''
        for _r in _tuple:
            tr = TableRow()
            self.table.addElement(tr)
            for _c in _r:
                tc = TableCell( stylename= stylename )
                tr.addElement(tc)
                p = P(text = _c )
                tc.addElement(p)
    def add_spanned_row( self, _tuple, stylename, _count_col_spanned = 3):
        tr = TableRow()
        self.table.addElement(tr)
        for _c in _tuple:
            tc = TableCell( stylename= stylename )
            tc = TableCell( stylename= stylename, numbercolumnsspanned= _count_col_spanned, numberrowsspanned = 1 )
            tr.addElement(tc)
            p = P(text = _c )
            tc.addElement(p)
            tr.addElement( CoveredTableCell() )
    def add_row( self, _tuple, stylename):
        tr = TableRow()
        self.table.addElement(tr)
        for _c in _tuple:
            tc = TableCell( stylename= stylename )
            tr.addElement(tc)
            p = P(text = _c )
            tc.addElement(p)
    def add_cell( self, _cell, _table_row, stylename):
        tc = TableCell( stylename= stylename )
        _table_row.addElement(tc)
        p = P(text = _cell )
        tc.addElement(p)
    def generate_ods(self, path="/home/apkawa/work/test_desu", group=False):
        self.make_style( tablename = self.category.name )

        self.add_spanned_row( (u'OOO "Политехник"',), self.head )
        head = (
                ( u'phone:','+7 (812) 312-42-38'),
                ( u'','+7 (812) 970-42-93'),
                ( u'email:','*****@*****.**'),
                ( u'www:','http://polytechnik.ru'),
                ('',),
                )
        self.add_rows( head, self.head )
        self.add_row( ( u'Прайс от %s'%date,), self.root_style )
        self.add_spanned_row( (self.category.name, ), self.tablemanuf )
        
        self.add_row( ( u'Наименование',u'Описание',u'Цена',), self.tablehead )


        manuf = None
        type_product = 13
        for p in self.price:

            if manuf != p.manufacturer_id and p.manufacturer_id != 233:
                manuf = p.manufacturer.id
                self.add_spanned_row( (p.manufacturer.name,) , self.tablemanuf )

            if type_product != p.type_product_id and p.type_product_id != 13:
                type_product = p.type_product_id
                self.add_spanned_row( ( p.type_product.name,) , self.tablemanuf )

            p_desc = p.desc
            p_cell = ' %.0f %s'%(p.cell, p.valyuta.desc) if p.cell else ' -'

            if p_desc:
                self.add_row( ( p.name, p_desc, p_cell  ) , self.tablecontents )
            elif not p.desc and not p.cell:
                p_name = re.sub('(<h4>|</h4>)','',p.name)
                self.add_spanned_row( (p_name,), self.tablehead )
            else:
                tr = TableRow( stylename = self.tablecontents )
                self.table.addElement(tr)
                p_price = ( p.name, p_cell )

                #self.add_cell( pl, tr, self.tablecontents, )#numbercolumnsspanned=2, numberrowsspanned = 1 )
                tc = TableCell( stylename= self.tablecontents, numbercolumnsspanned=2, numberrowsspanned = 1 )
                tr.addElement(tc)
                p = P(text=p_price[0])
                tc.addElement(p)

                tr.addElement( CoveredTableCell() )


                self.add_cell( p_price[1], tr, self.tablecontents )

        self.doc.spreadsheet.addElement( self.table )
        self.doc.save( path , True)
    def read_stdout(self):
        print 'name; desc;cell; manuf;pos;type_product;pos;category_id; img_url'
        manuf = None
        type_product = None
        for p in self.price:
            if manuf != p.manufacturer_id and p.manufacturer_id != 233:
                manuf = p.manufacturer.id
                print '"%s";"%s";\n'%(p.manufacturer.name,p.manufacturer.pos if p.manufacturer.pos else '')

            if type_product != p.type_product_id and p.type_product_id != 13:
                type_product = p.type_product_id
                print '"%s";"%s";\n'%(p.type_product.name, p.type_product.pos if p.type_product.pos else '' )
            # 0          1       2        3      4     5             6     7          8
            #name_pr	desc	cell	manuf	pos	type_product	pos	category_id	img_flag
 
            print '"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s";'%(p.name,
                    p.desc if p.desc else '',
                    '%.0f %s'%(p.cell, p.valyuta.desc),
                    p.manufacturer.name,
                    p.manufacturer.pos,
                    p.type_product.name,
                    p.type_product.pos,
                    p.category_id,
                    p.img_url if p.img_url else '') 
    def connect_base(self, category_id = 202, manufac_name = False):
        self.base = []
        self.category = Category.objects.get(id= category_id )
        if manufac_name and type(manufac_name) == type([]):
            self.price = Price.objects.filter(
                    category = self.category, manufacturer__name__in = manufac_name ).order_by(
                            'manufacturer__pos','manufacturer', 'type_product__pos','type_product','id' )
        elif manufac_name:
            self.price = Price.objects.filter(
                    category = self.category, manufacturer__name = manufac_name ).order_by(
                            'manufacturer__pos','manufacturer', 'type_product__pos','type_product','id' )
        else:
            self.price = Price.objects.filter( category = self.category ).order_by( 'manufacturer__pos','manufacturer',
                 'type_product__pos','type_product','id' )

        if not self.price.count():
            return False
        else:
            return True
示例#44
0
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)
        for val in rec:
            tc = TableCell(parent=tr)
            p = P(parent=tc, stylename=tablecontents, text=val)

textdoc.save('passwd.ods')
示例#45
0
def export_odf_report(filename: str, borrowing_facts: Iterable[Tuple[str, str,
                                                                     float]]):
    # Thanks to https://joinup.ec.europa.eu/svn/odfpy/tags/release-0.9/api-for-odfpy.odt
    # for example of this API

    doc = OpenDocumentSpreadsheet()

    # -------- add styles -----------
    vertcell = Style(name="vcell", family="table-cell")
    vertcell.addElement(TableCellProperties(rotationangle=90))

    # -------- create table ----------

    # Start the table, and describe the columns
    table = Table(name="Borrowing")

    # ------ process some data ---------

    scols = set(gfn for bfn, gfn, bo in borrowing_facts)
    cols = sorted(scols)
    rows = sorted(set(bfn for bfn, gfn, bo in borrowing_facts))

    rc: Dict[str, int] = {}
    rr: Dict[str, int] = {}
    for c, i in zip(cols, itertools.count()):
        rc[c] = i
    for r, i in zip(rows, itertools.count()):
        rr[r] = i

    data = [[0.0] * len(cols) for r in rows]  # to make different list

    for bfn, gfn, bo in borrowing_facts:
        dr = rr[bfn]
        dc = rc[gfn]
        data[dr][dc] = bo

    # --------- go! ----------

    tr = TableRow()

    tc = TableCell()
    tc.addElement(P(text=r"Borrower \ Source"))
    tr.addElement(tc)

    for c in cols:
        tc = TableCell(stylename=vertcell)
        tc.addElement(P(text=c))
        tr.addElement(tc)

    table.addElement(tr)

    for r, rd in zip(rows, data):
        tr = TableRow()

        tc = TableCell()
        tc.addElement(P(text=r))
        tr.addElement(tc)

        for cd in rd:
            if cd > 0:
                tc = TableCell(valuetype='percentage', value=cd)
            else:
                tc = TableCell()
            tr.addElement(tc)

        table.addElement(tr)

    doc.spreadsheet.addElement(table)
    doc.save(filename, False)
示例#46
0
# Create automatic style for the price cells.
moneycontents = Style(name="ce1",
                      family="table-cell",
                      parentstylename=tablecontents,
                      datastylename="main-AUD")
textdoc.automaticstyles.addElement(moneycontents)

# Start the table, and describe the columns
table = Table(name="Currency colours")
# Create a column (same as <col> in HTML) Make all cells in column default to currency
table.addElement(TableColumn(stylename=widewidth, defaultcellstylename="ce1"))
# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create a cell with a negative value. It should show as red.
cell = TableCell(valuetype="currency", currency="AUD", value="-125")
cell.addElement(P(text=u"$-125.00"))  # The current displayed value
tr.addElement(cell)

# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create another cell but with a positive value. It should show in black
cell = TableCell(valuetype="currency", currency="AUD", value="123")
cell.addElement(P(text=u"$123.00"))  # The current displayed value
tr.addElement(cell)

textdoc.spreadsheet.addElement(table)
textdoc.save("currency.ods")
示例#47
0
tmpcs = Map(condition="value()>=0", applystylename="positive-AUD")
ns2.addElement(tmpcs)
textdoc.styles.addElement(ns2)

# Create automatic style for the price cells.
moneycontents = Style(name="ce1", family="table-cell", parentstylename=tablecontents, datastylename="main-AUD")
textdoc.automaticstyles.addElement(moneycontents)

# Start the table, and describe the columns
table = Table(name="Test")
# Create a column (same as <col> in HTML) Make all cells in column default to currency
table.addElement(TableColumn(stylename=widthwide, defaultcellstylename="ce1"))
# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create a cell
cell = TableCell(valuetype="currency", currency="AUD", value="-125")
cell.addElement(P(text=u"$-125.00"))  # The current displayed value
tr.addElement(cell)

# Create a row (same as <tr> in HTML)
tr = TableRow()
table.addElement(tr)
# Create another cell
cell = TableCell(valuetype="currency", currency="AUD", value="123")
cell.addElement(P(text=u"$123.00"))  # The current displayed value
tr.addElement(cell)

textdoc.spreadsheet.addElement(table)
textdoc.save("test.ods")