web-dev-qa-db-fra.com

Écriture de chaînes multilignes dans des cellules à l'aide d'openpyxl

J'essaie d'écrire des données dans une cellule, qui a plusieurs sauts de ligne (je crois\n), le .xlsx résultant a des sauts de ligne supprimés. Existe-t-il un moyen de conserver ces sauts de ligne?

23
user1514631

Avertissement : Cela ne fonctionnera pas dans les versions récentes d'Openpyxl. Voir d'autres réponses.

Dans openpyxl, vous pouvez définir le wrap_text propriété d'alignement pour encapsuler des chaînes multilignes:

from openpyxl import Workbook

workbook = Workbook()
worksheet = workbook.worksheets[0]
worksheet.title = "Sheet1"

worksheet.cell('A1').style.alignment.wrap_text = True
worksheet.cell('A1').value = "Line 1\nLine 2\nLine 3"

workbook.save('wrap_text1.xlsx')

enter image description here

Ceci est également possible avec le module XlsxWriter .

Voici un petit exemple de travail:

from xlsxwriter.workbook import Workbook

# Create an new Excel file and add a worksheet.
workbook = Workbook('wrap_text2.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a cell format with text wrap on.
cell_format = workbook.add_format({'text_wrap': True})

# Write a wrapped string to a cell.
worksheet.write('A1', "Line 1\nLine 2\nLine 3", cell_format)

workbook.close()
33
jmcnamara

L'API des styles a changé pour openpyxl> = 2. Le code suivant illustre l'API moderne.

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
ws = wb.active # wb.active returns a Worksheet object
ws['A1'] = "Line 1\nLine 2\nLine 3"
ws['A1'].alignment = Alignment(wrapText=True)
wb.save("wrap.xlsx")
39
Charlie Clark