4 votes

xlsxwriter : comment centrer une image dans une cellule ?

Je définis la taille de ma colonne et de mes lignes en utilisant respectivement set_column et set_row, comme suit :

my_worksheet.set_column('A:KK', 17)
my_worksheet.set_row(0, 99.6)

J'ai ce code pour imprimer une image de taille arbitraire dans la cellule :

width, height = im.size
# Calculate scale: Problematic
x_scale = IMAGE_CELL_SIZE_PX[0]/float(width) 
y_scale = (IMAGE_CELL_SIZE_PX[1] - 5.0)/float(height)
# Calculate offset: Problematic
x_offset = ((IMAGE_CELL_SIZE_PX[0] - width) / 2.0) / x_scale
y_offset = ((IMAGE_CELL_SIZE_PX[1] - 5 - height) / 2.0) / y_scale
worksheet.insert_image(row, col, image_path, {'x_offset': x_offset, 'y_offset': y_offset, 'x_scale': x_scale, 'y_scale': y_scale})

Le problème est qu'il ne fonctionne pas. La taille de l'image n'est pas bonne et les images sont la plupart du temps loin d'être centrées. C'est comme s'il me manquait un terme. Le problème principal est que je n'arrive pas à trouver un moyen de convertir les pixels en unités de longueur d'Excel et de xlsxwriter de manière robuste et indépendante de la machine.

Je ne peux définir la largeur des cellules que par le biais de set_column qui prend les unités excel et je connais les dimensions de l'image en pixels (grâce à Pillow Image.size). Apparemment, la transformation entre les deux dépend de la machine. Avez-vous une idée ?

2voto

jmcnamara Points 6100

Vous pouvez utiliser le worksheet._size_col() y worksheet._size_row() ( voir ici dans le code ) qui convertit un index de colonne ou de ligne basé sur zéro en une taille de pixel.

L'autre chose à laquelle il faut faire attention est qu'Excel met à l'échelle les images sur la base d'un DPI de 96. Si l'image a un autre DPI, vous devez tenir compte de la mise à l'échelle. Voici ce qui se passe en interne dans XlsxWriter pour tenir compte de la mise à l'échelle d'Excel :

    # Scale by non 96dpi resolutions.
    width *= 96.0 / x_dpi
    height *= 96.0 / y_dpi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X