Applica il formato a una cella dopo essere stato scritto in XlsxWriter

Lavoro su python utilizzando XlsxWriter e ho cercato di risolvere questo problema senza successo:

La mia applicazione deve creare un file Xlsx in cui i dati vengono visualizzati in una struttura di tipo tabella. Quella tabella ha alcune celle vuote.

Vorrei impostare i confini di alcune celle per creare una griglia per il tavolo in modo da utilizzare:

format6 = excelbook.add_format() format6.set_left(1) for y in range(24): excel.write(y+5, 1, None, format6) 

per avere il bordo applicato a quelle cellule. Poi scrivo i dati sulla tabella.

Poiché il layout della tabella è abbastanza complessa, sarebbe facile scrivere i dati e, una volta scritto tutto, applicare il formato alle celle per avere confini, ma non riesco a trovare il modo.

C'è un modo per applicare il formato a una cella una volta che è stato scritto in precedenza senza perdere il suo contenuto?

Grazie in anticipo.

Solutions Collecting From Web of "Applica il formato a una cella dopo essere stato scritto in XlsxWriter"

Sono l'autore di quel module e, purtroppo, questo non è ansible.

È una caratteristica pianificata e una parte (piccola) dell'infrastruttura interna è lì per sostenerla, ma non è attualmente disponibile e non posso dire quando sarà.

Un'altra soluzione è utilizzare conditional_format e utilizzare type='no_errors' :

 worksheet.conditional_format(your_range, {'type': 'no_errors', 'format': your_format}) 

Un modo per farlo – utilizzare un metodo wrapper per scrivere la cella e il metodo helper per sovrascrivere il valore e lo stile della cella

 import xlsxwriter class XLSGenerator: def __init__(self): self.workbook = xlsxwriter.Workbook('file.xls') sheet1 = self.workbook.add_worksheet('sheet1') sheet2 = self.workbook.add_worksheet('sheet2') self.sheets = {'sheet1': sheet1, 'sheet2': sheet2} # dictionary with all written cells self.written_cells = {sheet: {} for sheet in self.sheets} def write_cell(self, sheet_name, cell, value, cell_format_dict=None): """Writes value and style, and saves it in self.written_cells""" sheet = self.sheets[sheet_name] if cell_format_dict: cell_format = self.workbook.add_format(cell_format_dict) sheet.write(cell, value, cell_format) else: cell_format_dict = None sheet.write(cell, value) # save sheet_name, cell and cell_value, and cell_format (dict) # example ['sheet1']['C12'] = ('some_text', {'font_size': 14, 'bold': True} self.written_cells[sheet_name][cell] = (value, cell_format_dict) def apply_style(self, sheet_name, cell, cell_format_dict): """Apply style for any cell, with value or not. Overwrites cell with joined cell_format_dict and existing format and with existing or blank value""" written_cell_data = self.written_cells[sheet_name].get(cell) if written_cell_data: existing_value, existing_cell_format_dict = self.written_cells[sheet_name][cell] updated_format = dict(existing_cell_format_dict or {}, **cell_format_dict) else: existing_value = None updated_format = cell_format_dict self.write_cell(sheet_name, cell, existing_value, updated_format) 

Uso come questo

 generator = XLSGenerator() generator.write_cell('sheet1', 'A1', '10') generator.write_cell('sheet1', 'B2', '20') generator.write_cell('sheet1', 'C3', '30') table_borders = {"left": 1, 'right': 1, 'top': 1, 'bottom': 1} for cell in ('A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'): generator.apply_style('sheet1', cell, table_borders) generator.workbook.close() 

immettere qui la descrizione dell'immagine