4D Write Pro: Copier une cellule d'un tableau

Comment dupliquer une cellule à l’identique ? (avec tous les attributs sans avoir à les réappliquer un à un)
C’est possible :?:

bonjour

Si vous voulez dupliquer une cellule ça signifie qu’il faut dupliquer la cellule elle-même (avec ses attributs) ainsi que son contenu, c’est bien cela ?

Pour le contenu c’est TRES simple (wp new suivi d’un WP INSERT DOCUMENT) (voir le code ci dessous)
Pour les bordures, le fond, etc, c’est UN PEU plus compliqué, et tout dépend dece que vous voulez réellement copier.

je vois essentiellement les attributs suivants
wk border style
wk border width
wk border color
wk background color

et éventuellement
wk width
wk height
wk background image
wk background image url

Code du COPIER (il suffit de mémoriser la cellule a copier (table et coordonnées)
(basé sur la sélection utilisateur limité à UNE SEULE cellule en source)

<code 4D>
// COPY
$userRange:=WP Selection range(WParea)
$tableRange:=WP Table range($userRange)
$_tables:=WP Get elements($tableRange;wk type table)

Form.memoCell:=Null

If ($_tables#Null)
If ($_tables.length=1)
$cells:=WP Table get cells($userRange)
If ($cells#Null)
If ($cells[wk row count]=1) & ($cells[wk column count]=1) // only ONE cell selected
Form.memoCell:=New object(“table”;$_tables[0].id;“row”;$cells[wk first row];“column”;$cells[wk first column])
End if
End if
End if
End if

</code 4D>

Code du COLLER (avec récupération de la cellule mémorisée)
(basé sur la sélection utilisateur limité à UNE SEULE cellule en destination

<code 4D>
// PASTE
$userRange:=WP Selection range(WParea)
$tableRange:=WP Table range($userRange)
$_tables:=WP Get elements($tableRange;wk type table)

If (Form.memoCell#Null)
If ($_tables#Null)
If ($_tables.length=1)

		$cells:=WP Table get cells($userRange)
		If ($cells#Null)
			If ($cells[wk row count]=1) & ($cells[wk column count]=1)
				
				  // read
				$copyCell:=WP Table get cells(WP Get element by ID(WParea;Form.memoCell.table);Form.memoCell.column;Form.memoCell.row;1;1)
				  //write
				$pasteCell:=WP Table get cells(WP Get element by ID(WParea;$_tables[0].id);$cells[wk first column];$cells[wk first row];1;1)
				
				
				  // 1st : Content
				$content:=WP New($copyCell)
				WP INSERT DOCUMENT($pasteCell;$content;wk replace)
				
				  //2nd : Borders & background
				WP GET ATTRIBUTES($copyCell;wk border style;$style;wk border width;$width;wk border color;$color;wk background color;$bckColor)  // etc (wk width;wk height;…)
				WP SET ATTRIBUTES($pasteCell;wk border style;$style;wk border width;$width;wk border color;$color;wk background color;$bckColor)  // etc (wk width;wk height;…)
				
			End if 
		End if 
	End if 
End if 

End if

</code 4D>

Et voila…

Roland Lannuzel

Déjà merci de m’avoir répondu; je me suis inspiré de votre code pour essayer de faire ce que je recherche.

Mais, je suis rapidement confronté à un problème lorsque j’execute la partie du code du collage du contenu de la cellule, j’obtiens un message d’erreur :

[]34154553;“erreur lors de la creation d’un nouveau doc 4D Write Pro…”[/]

Voici ce que j’ai dans mon $copyCell:

[]34154562;“Contenu du $copyCell”[/]

Testé avec la version 4D v18.0 build 18.249194

En fait l’erreur porte sur la commande WP New qui ne semble pas apprécier le paramètre de cellule que je lui passe. Est-ce censé fonctionner ainsi ?

Bon, j’avoue avoir écrit ce code “entre midi et deux” pour répondre rapidment et l’avoir écrit avec une version de dev interne (la future R3…)

Le contenu de $copyCell semblant correct, je pense que c’est WP New qui est un peu moins permissif en v18.

Je vais voir si je peux trouver un contournement.

Est-ce que la suite fonctionne (les attributs de cellule) ?

RL

Edited : testé avec 18.0 build 18.249357

Ça marche…
voila ma base (deux boutons dans le form)

https://forums.4d.com/4DBB_Main/x_User/4028/files/34154849.zip

la “preuve” en image :slight_smile:

[]34154977;“Your comment here…”[/]

Roland Lannuzel

: Roland LANNUZEL

Est-ce que la suite fonctionne (les attributs de cellule) ?

Oui :!:

Mais, sans le contenu ça s’annonce compliqué… :roll:

J’ai testé de mon coté en lisant l’expression mais je n’ai pas compris comment la recoller dans la cellule.

En R2 vous avez introduit une commande WP INSERER FORMULE sauf que je travail en v18 :cry:

Ensuite cela ne résoudra pas mon desire d’avoir les memes attributs, j’ai cru lire dans la doc qu’on ne peut pas utiliser les feuilles de style dans une cellule de tableau :?:

Bref, cela, se complique sérieusement…

: Manuel PIQUET

Ensuite cela ne résoudra pas mon desire d’avoir les memes attributs,
j’ai cru lire dans la doc qu’on ne peut pas utiliser les feuilles de
style dans une cellule de tableau

Bien sur que si. Si c’est écrit dans la doc (je veux bien un lien) je vais la faire corriger !

Une cellule ne contient rien d’autre qu’un ou des paragraphes…auxquels on peut appliquer des style…de paragraphe. ET à l’intérieur desquels on peut appliquer des styles…de caractère.

Ce qui n’existe pas (encore) ce sont des styles de table, de row, de cellule ou d’image (ça viendra peut-être). C’est différent !

Ça signifie qu’on ne peut pas définir un style de cellule (bordures, couleurs de fond, alignements vertical…) bref, tous les attributs de cellule quoi.

(idem pour les rows, tables, images…)

: Manuel PIQUET

J’ai testé de mon coté en lisant l’expression

WP New($cell) prend le contenu en globalité…
Ci dessous une copie d’écran d’une table ou j’ai copié-collé des cellules comprenant des FdS ET des formules (sans changer une seule ligne de code de la base fournie)

[]34155378;“Your comment here…”[/]

Roland Lannuzel

Bon, j’avance mais c’est pas encore ça.

J’avais une simple erreur de typage de la variable d’affection :oops:

Question: c’est normal que si je trace un tableau que je modifie la largeur via un redimensionnement à la souris directement via la zone, la taille des cellules reste sur automatique ?

En ce qui concerne la doc sur les feuilles de style j’ai peut-etre mal compris mais voici une capture d’ecran
[]34156306;“Doc feuille de style 4D Write Pro…”[/]

Et voici https://doc.4d.com/4Dv18/4D/18/Attributs-4D-Write-Pro.300-4523004.fr.htmlle lien sur la doc>

: Manuel PIQUET

Question: c’est normal que si je trace un tableau que je modifie la
largeur via un redimensionnement à la souris directement via la zone,
la taille des cellules reste sur automatique ?
La question est mal posée, la methode redimensionne bien la taille des cellules, mais ensuite lorsqu’on fait un recalcul des expressions contenu dans les cellules, la taille des cellules est remodifiée ! :cry:
Comment faire pour conserver la largeur de la cellule comme on l’a tracé/souhaité :?:
Faut la reappliquer après ou y a un autre moyen ?

bonjour

En ce qui concerne la doc : la confusion vient du fait qu’il ne faut pas confondre les feuilles de style en tant qu’attribut de texte (feuille de style caractère) ou de paragraphe (feuille de style paragraphe) avec les attributs des feuilles de style elles-mêmes.


Ce qui est écrit dans la doc me semble relativement correct donc mais le tableau ‘générique’ qui liste les types d’élements n’est pas approprié.

J’aurais supprimé le X sous image (car ce n’est rien d’autre qu’un caractère quand une image est inline (qui sera soulignéé si la feuille de style contient cet attribut).

Idem pour les feuilles de style des entête et pieds qui sont en lecture seule, et qui existent seulement de façon implicite.

Le X sous Section est en trop (je vais le faire enlever)
Et il manque le type “caractère” (qui n’est pas dans le tableau … :slight_smile:

Je vais voir ce que je peux faire (faire)…

Roland

C’est le titre de la section :wink: de la doc qui m’a induit en erreur, j’ai oublié que j’étais dans la partie attributs de 4D Write Pro.

Il faut comprendre que le texte inclus dans une cellule d’un tableau peut avoir une feuille de style.
Les attributs de feuilles de style ne s’appliquent pas à l’élément cellule d’un tableau.

Juste pour l’exercice: comment je pourrais appliquer l’attribut wk style sheet au texte contenu dans une cellule en ayant comme objet la cellule ?

: Manuel PIQUET

la méthode redimensionne bien la taille des cellules, mais ensuite
lorsqu’on fait un recalcule des expressions contenu dans les
cellules, la taille des cellules est remodifiée ! :cry:
Comment faire pour conserver la largeur de la cellule comme on l’a
tracé/souhaité :?:
Faut la reappliquer après ou y a un autre moyen ?

Je ne comprends pas ce qu’il se passe : je fixe les attributs de largeur des cellules mais ils ne sont pas respectés à l’affichage ? si je les lis par programmation, j’ai les bons chiffres :?: :?: :?:

[]34171941;“Que ce passe t-il ?..”[/]

En bas, le tableau dans lequel je lis les largeurs de colonne (respectivement 10,1,2,3 cm)

En haut, le tableau que j’obtiens à l’affichage :?: :!: la largeur des colonnes est visiblement plus la même alors que je l’ai réappliqué par programmation :doubt:

Si je la lis par programmation elle me retourne les mêmes valeurs :?:

Comment est-ce possible ?

Je pense que c’est le contenu qui doit changer la largeur des cellules au moment de l’affichage :-?
Mais comment faire pour que l’affichage respecte les largeurs de cellule que j’applique par programmation ?

Bonjour,

je dirais (sans tester ni rien…)

$range:=WP Paragraph range($cell) // ->pour appliquer à $range des style de paragraphe
$range:=WP Text range($cell) // ->pour appliquer à $range des style de texte

Roland Lannuzel

P.S. la semaine prochaine je m’enferme dans ma bulle pour préparer le summit…

Pour mon problème de largeur de colonne : même en affectant la largeur au cellule, puis au paragraphe contenu dans la cellule, je n’arrive pas à avoir une largeur fixe identique à mon tableau de départ ?

Une idée :idea: :?:

Bizarre, je viens de faire une impression, mon tableau de départ s’imprime avec ces largeurs de colonnes :
1ere colonne : 10 cm pile
2eme colonne : 1,4 cm <= erreur en lecture par programmation j’obtiens un largeur de cellule de 1 cm ?
3eme colonne : 2 cm pile
4eme colonne: 3 cm pile
pour une largeur total de 16,4 cm

mon tableau recréer par programmation s’imprime avec les largeurs suivantes :
1ere colonne : 10,2 cm
2eme colonne : 1,2 cm
3eme colonne : 2,2 cm
4eme colonne: 3,2 cm
pour une largeur total de 16,8 cm