def _render_name_freq(self, freq_table): """Produces name statistics table. :param freq_table: list of (name, count) tuples. """ def _gencouples(namefreq): halflen = (len(namefreq) + 1) // 2 for i in range(halflen): n1, c1 = namefreq[2 * i] n2, c2 = None, None if 2 * i + 1 < len(namefreq): n2, c2 = namefreq[2 * i + 1] yield n1, c1, n2, c2 total = float(sum(count for _, count in freq_table)) tbl = table.Table() tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) for name1, count1, name2, count2 in _gencouples(freq_table): row = table.TableRow() cell = table.TableCell() cell.addElement(text.P(text=name1 or '-')) row.addElement(cell) cell = table.TableCell() cell.addElement( text.P(text='%d (%.1f%%)' % (count1, count1 / total * 100))) row.addElement(cell) if count2 is not None: cell = table.TableCell() cell.addElement(text.P(text=name2 or '-')) row.addElement(cell) cell = table.TableCell() cell.addElement( text.P(text='%d (%.1f%%)' % (count2, count2 / total * 100))) row.addElement(cell) tbl.addElement(row) self.doc.text.addElement(tbl)
def dset_sheet(cls, dataset, ws): """Completes given worksheet from given Dataset.""" _package = dataset._package(dicts=False) for i, sep in enumerate(dataset._separators): _offset = i _package.insert((sep[0] + _offset), (sep[1], )) for i, row in enumerate(_package): row_number = i + 1 odf_row = table.TableRow(stylename=bold, defaultcellstylename='bold') for j, col in enumerate(row): try: col = str(col, errors='ignore') except TypeError: # col is already str pass ws.addElement(table.TableColumn()) # bold headers if (row_number == 1) and dataset.headers: odf_row.setAttribute('stylename', bold) ws.addElement(odf_row) cell = table.TableCell() p = text.P() p.addElement(text.Span(text=col, stylename=bold)) cell.addElement(p) odf_row.addElement(cell) # wrap the rest else: try: if '\n' in col: ws.addElement(odf_row) cell = table.TableCell() cell.addElement(text.P(text=col)) odf_row.addElement(cell) else: ws.addElement(odf_row) cell = table.TableCell() cell.addElement(text.P(text=col)) odf_row.addElement(cell) except TypeError: ws.addElement(odf_row) cell = table.TableCell() cell.addElement(text.P(text=col)) odf_row.addElement(cell)
def _render_name_freq(self, freq_table): # docstring inherited from base class def _gencouples(namefreq): halflen = (len(namefreq) + 1) // 2 for i in range(halflen): n1, c1 = namefreq[2 * i] n2, c2 = None, None if 2 * i + 1 < len(namefreq): n2, c2 = namefreq[2 * i + 1] yield n1, c1, n2, c2 total = float(sum(count for _, count in freq_table)) tbl = table.Table() tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) tbl.addElement(table.TableColumn()) for name1, count1, name2, count2 in _gencouples(freq_table): row = table.TableRow() cell = table.TableCell() cell.addElement(text.P(text=name1 or '-')) row.addElement(cell) cell = table.TableCell() cell.addElement( text.P(text='%d (%.1f%%)' % (count1, count1 / total * 100))) row.addElement(cell) if count2 is not None: cell = table.TableCell() cell.addElement(text.P(text=name2 or '-')) row.addElement(cell) cell = table.TableCell() cell.addElement( text.P(text='%d (%.1f%%)' % (count2, count2 / total * 100))) row.addElement(cell) tbl.addElement(row) self.doc.text.addElement(tbl)
def __call__(self): datatable = table.Table(name="local-table") if self.datasourcehaslabels in ('row', 'both'): t = table.TableHeaderColumns() t.addElement(table.TableColumn()) datatable.addElement(t) t = table.TableColumns() if self.datasourcehaslabels in ('row', 'both'): t.addElement( table.TableColumn(numbercolumnsrepeated=str(self.numcols - 1))) else: t.addElement( table.TableColumn(numbercolumnsrepeated=str(self.numcols))) datatable.addElement(t) if self.datasourcehaslabels in ('column', 'both'): t = table.TableHeaderRows() datatable.addElement(t) tr = table.TableRow() t.addElement(tr) content = self.values[0] for val in content: tc = table.TableCell(valuetype=valuetype(val)) tr.addElement(tc) tc.addElement(text.P(text=str(val))) t = table.TableRows() datatable.addElement(t) rownum = 0 for content in self.values: if rownum == 0 and self.datasourcehaslabels in ('column', 'both'): rownum += 1 continue tr = table.TableRow() t.addElement(tr) for val in content: tc = table.TableCell(valuetype=valuetype(val), value=val) tr.addElement(tc) tc.addElement(text.P(text=str(val))) rownum += 1 return datatable
def owriteCell(self, cell): t = table.TableCell() p = ParagraphProxy(stylename=style.textbody) t.addElement(p) t.writeto = p # handle rowspan FIXME # #rs = cell.rowspan #if rs: # t.setAttribute(":numberrowsspanned",str(rs)) return t
def __add_cell_to_row(row, cell_style, text_style, text: str, spanned_columns=None): value_cell = odf_table.TableCell(valuetype="string") value_cell.setAttribute("stylename", cell_style) if spanned_columns is not None: value_cell.setAttribute("numbercolumnsspanned", spanned_columns) row.addElement(value_cell) __add_text_to_element(value_cell, text_style, text)
def __add_row_with_texts_to_table(table, text_style, cell_style, texts: list, row_length_in_cells): """ В __add_row_with_text_to_table нельзя вставлять переводы строки, в этой функции можно """ table_row = __add_row_to_table(table) value_cell = odf_table.TableCell(valuetype="string") value_cell.setAttribute("stylename", cell_style) value_cell.setAttribute("numbercolumnsspanned", row_length_in_cells) table_row.addElement(value_cell) for t in texts: __add_text_to_element(value_cell, text_style, t)
def _write_journal(self, journal): path = os.path.join( options.REPORTS_DIR, 'Журнал {} {} {}.odt'.format( self.year, self.months[self.month], self.doctor[1], )) doc = opendocument.OpenDocumentText() table_style = style.Style(name='tableStyle', family='table', masterpagename='masterQ') page_layout = style.PageLayout(name='pageStyle') page_layout.addElement( style.PageLayoutProperties( printorientation='landscape', margin='0cm', pagewidth='290cm', pageheight='21cm', )) master_q = style.MasterPage(name='masterQ', pagelayoutname=page_layout) doc.automaticstyles.addElement(table_style) doc.automaticstyles.addElement(page_layout) doc.masterstyles.addElement(master_q) journal = ([['Дата', 'ФИО', 'Дата Рождения', 'Адрес', 'Заключение']] + journal) _table = table.Table(name='journal') _table.addElement( table.TableColumn(numbercolumnsrepeated=len(journal[0]))) for data in journal: row = table.TableRow() _table.addElement(row) for col in data: cell = table.TableCell(valuetype='string') cell.addElement(text.P(text=str(col or ''))) row.addElement(cell) doc.text.addElement(_table) try: doc.save(path) except PermissionError: self.main_window.create_alert( 'Файл журнала используется.\nЗакройте его и создайте снова.') return self._open(path)
def __newCell__(self) -> Tuple[table.TableCell, style.Style]: """ Return new cell This is created by assigning the value to the previous one. @return Tuple(TableCell, Style) """ style_cell = style.Style( name="stylecell_%s_%s" % (len(self.cells_list_), self.sheet_.rowsCount()), family="table-cell", ) if self.row_color_: # Guardo color si hay style_cell.addElement( style.TableCellProperties(backgroundcolor="#%s" % self.row_color_) ) for prop in self.property_cell_: # Guardo prop cell si hay style_cell.addElement(prop) self.property_cell_ = [] return table.TableCell(valuetype="string", stylename=style_cell), style_cell
uf = UserFieldDecls() textdoc.text.addElement(uf) # Add user fields for id,transunit in body_info.items(): uf.addElement(UserFieldDecl(name=id,valuetype="string", stringvalue=transunit['target'])) # Start the table, and describe the columns mytable = table.Table(protected="true") mytable.addElement(table.TableColumn(numbercolumnsrepeated=2,stylename=widthwide)) for id,transunit in body_info.items(): tr = table.TableRow() mytable.addElement(tr) tc = table.TableCell(stylename=tcstyle, qattributes={(TABLENS,'protected'):'true'}) tr.addElement(tc) p = P(stylename=tablecontents,text=transunit['source']) tc.addElement(p) tc = table.TableCell(qattributes={(TABLENS,'protected'):'true'}) tr.addElement(tc) p = P(stylename=tablecontents) tc.addElement(p) f = UserFieldInput(name=id,description="Enter translation") p.addElement(f) textdoc.text.addElement(mytable) textdoc.save("translations.odt")
def s_html_td(self, tag, attrs): e = table.TableCell() self.curr.addElement(e) self.curr = e
def create_cell(text, *args, **kwargs): tc = table.TableCell(*args, **kwargs) tc.addElement(P(text=text)) return tc