web-dev-qa-db-fra.com

Comment écrire une cellule avec plusieurs colonnes dans xlwt?

Je voudrais écrire un tableau comme celui-ci:

----------------
| Long Cell    |
----------------
| 1    | 2     |
----------------

Comment écrire la cellule Long Cell? Merci.

J'ai essayé de le faire comme ceci:

sheet.write(0, 0, 'Long Cell')
sheet.write(1, 0, 1)
sheet.write(1, 1, 2)

Mais ça finit comme:

--------------------
| Long Cell |      |
--------------------
| 1         | 2    |
--------------------
23
Bin Wang

Pour autant que je sache, cela n'est pas documenté - vous devez lire le code source pour le trouver. Il existe deux méthodes sur la classe Worksheet pour ce faire, write_merge et merge. merge prend les cellules existantes et les fusionne, tandis que write_merge écrit une étiquette (tout comme write) et fait la même chose que merge.

Les deux prennent les cellules pour fusionner en r1, r2, c1, c2, et acceptez un paramètre style facultatif.

D'après votre exemple, ce serait l'appel le plus simple:

sheet.write_merge(0, 0, 0, 1, 'Long Cell')
sheet.write(1, 0, 1)
sheet.write(1, 1, 2)

Pour être plus explicite sur le fonctionnement de l'appel:

top_row = 0
bottom_row = 0
left_column = 0
right_column = 1
sheet.write_merge(top_row, bottom_row, left_column, right_column, 'Long Cell')

Alternativement, en utilisant merge:

sheet.write(top_row, left_column, 'Long Cell')
sheet.merge(top_row, bottom_row, left_column, right_column)

merge a quelques commentaires dans la source soulignant les problèmes potentiels:

    # Problems: (1) style to be used should be existing style of
    # the top-left cell, not an arg.
    # (2) should ensure that any previous data value in
    # non-top-left cells is nobbled.
    # Note: if a cell is set by a data record then later
    # is referenced by a [MUL]BLANK record, Excel will blank
    # out the cell on the screen, but OOo & Gnu will not
    # blank it out. Need to do something better than writing
    # multiple records. In the meantime, avoid this method and use
    # write_merge() instead.

Mais ce serait bien pour un cas simple comme celui-ci.

55
Peter DeGlopper