Python XlsxWriter establece un borde alrededor de varias celdas

Necesito una manera fácil de establecer el borde alrededor de varias celdas, como así: Borde alrededor de las células

Todo lo que encontré fue un borde de 1 celda y fusionar celdas, que no es lo que necesito.

Esperaba algo como:

worksheet.range_border(first_row, first_col, last_row, last_col) 

¿Hay alguna forma de hacer esto (que no implique establecer top_border, bottom_border, left_border, right_border para cada celda individualmente)?

XlsxWriter es un módulo impresionante que hizo que mi antiguo trabajo sea 1000x más fácil (¡gracias a John!), Pero formatear celdas con él puede llevar mucho tiempo. Tengo un par de funciones de ayuda que uso para hacer cosas como esta.

Primero, debe poder crear un nuevo formato agregando propiedades a un formato existente:

 def add_to_format(existing_format, dict_of_properties, workbook): """Give a format you want to extend and a dict of the properties you want to extend it with, and you get them returned in a single format""" new_dict={} for key, value in existing_format.__dict__.iteritems(): if (value != 0) and (value != {}) and (value != None): new_dict[key]=value del new_dict['escapes'] return(workbook.add_format(dict(new_dict.items() + dict_of_properties.items()))) 

Ahora construye a partir de esa función con:

 def box(workbook, sheet_name, row_start, col_start, row_stop, col_stop): """Makes an RxC box. Use integers, not the 'A1' format""" rows = row_stop - row_start + 1 cols = col_stop - col_start + 1 for x in xrange((rows) * (cols)): # Total number of cells in the rectangle box_form = workbook.add_format() # The format resets each loop row = row_start + (x // cols) column = col_start + (x % cols) if x < (cols): # If it's on the top row box_form = add_to_format(box_form, {'top':1}, workbook) if x >= ((rows * cols) - cols): # If it's on the bottom row box_form = add_to_format(box_form, {'bottom':1}, workbook) if x % cols == 0: # If it's on the left column box_form = add_to_format(box_form, {'left':1}, workbook) if x % cols == (cols - 1): # If it's on the right column box_form = add_to_format(box_form, {'right':1}, workbook) sheet_name.write(row, column, "", box_form) 

Actualmente no hay una manera fácil de hacer eso.

La solución actual de @aubaub dibuja una caja vacía. Necesitaba dibujar un marco alrededor de los valores existentes sin anularlos. Esta es mi función en caso de que ayude a alguien:

 def draw_frame_border(workbook, worksheet, first_row, first_col, rows_count, cols_count): # top left corner worksheet.conditional_format(first_row, first_col, first_row, first_col, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'top': 1, 'left': 1})}) # top right corner worksheet.conditional_format(first_row, first_col + cols_count - 1, first_row, first_col + cols_count - 1, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'top': 1, 'right': 1})}) # bottom left corner worksheet.conditional_format(first_row + rows_count - 1, first_col, first_row + rows_count - 1, first_col, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'bottom': 1, 'left': 1})}) # bottom right corner worksheet.conditional_format(first_row + rows_count - 1, first_col + cols_count - 1, first_row + rows_count - 1, first_col + cols_count - 1, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'bottom': 1, 'right': 1})}) # top worksheet.conditional_format(first_row, first_col + 1, first_row, first_col + cols_count - 2, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'top': 1})}) # left worksheet.conditional_format(first_row + 1, first_col, first_row + rows_count - 2, first_col, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'left': 1})}) # bottom worksheet.conditional_format(first_row + rows_count - 1, first_col + 1, first_row + rows_count - 1, first_col + cols_count - 2, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'bottom': 1})}) # right worksheet.conditional_format(first_row + 1, first_col + cols_count - 1, first_row + rows_count - 2, first_col + cols_count - 1, {'type': 'formula', 'criteria': 'True', 'format': workbook.add_format({'right': 1})})