Débutant - J'ai un script Python qui ajuste la largeur de différentes colonnes d'un fichier Excel, en fonction des valeurs spécifiées:
import openpyxl
from string import ascii_uppercase
newFile = "D:\Excel Files\abc.xlsx"
wb = openpyxl.load_workbook(filename = newFile)
worksheet = wb.active
for column in ascii_uppercase:
if (column=='A'):
worksheet.column_dimensions[column].width = 30
Elif (column=='B'):
worksheet.column_dimensions[column].width = 40
Elif (column=='G'):
worksheet.column_dimensions[column].width = 45
else:
worksheet.column_dimensions[column].width = 15
wb.save(newFile)
Existe-t-il un moyen de régler la largeur de chaque colonne à sa valeur optimale, sans la spécifier explicitement pour différentes colonnes (signifie, sans utiliser ce " if-Elif-elif -......- Elif -else "structure)? Merci!
for col in worksheet.columns:
max_length = 0
column = col[0].column # Get the column name
for cell in col:
try: # Necessary to avoid error on empty cells
if len(str(cell.value)) > max_length:
max_length = len(cell.value)
except:
pass
adjusted_width = (max_length + 2) * 1.2
worksheet.column_dimensions[column].width = adjusted_width
Cela pourrait probablement être rendu plus propre, mais cela fait l'affaire. Vous voudrez jouer avec la valeur adjust_width en fonction de ce qui convient à la police que vous utilisez lorsque vous la visualisez. Si vous utilisez un monotype, vous pouvez l’obtenir exactement, mais ce n’est pas une corrélation un à un; vous devrez donc l’ajuster un peu.
Si vous voulez obtenir des images sophistiquées et exactes sans monotype, vous pouvez trier les lettres par largeur et attribuer à chaque largeur une valeur flottante que vous additionnerez ensuite. Cela nécessiterait une troisième boucle analysant chaque caractère de la valeur de la cellule et récapitulant le résultat pour chaque colonne, et probablement un dictionnaire triant les caractères par largeur, peut-être excessif mais cool si vous le faites.
Edit: En fait, il semble exister un meilleur moyen de mesurer la taille visuelle du texte: link personnellement, je préférerais la technique matplotlib.
J'espère pouvoir vous aider, ma toute première réponse de stackoverflow =)
J'ai un problème avec merged_cells et l'autosize ne fonctionne pas correctement, si vous rencontrez le même problème, vous pouvez résoudre l'ajout des lignes suivantes dans le code de oldsea
for col in worksheet.columns:
max_length = 0
column = col[0].column # Get the column name
for cell in col:
if cell.coordinate in worksheet.merged_cells: # not check merge_cells
continue
try: # Necessary to avoid error on empty cells
if len(str(cell.value)) > max_length:
max_length = len(cell.value)
except:
pass
adjusted_width = (max_length + 2) * 1.2
worksheet.column_dimensions[column].width = adjusted_width