
S01E08 : Use clipboard for table transfer by Stéphanie LESCARRET
Les Uitable permettent de facilement rendre compte et éditer des données comme dans un tableur. On les utilise beaucoup dans les applications pour visualiser nos données sous forme de tableau. Et comme beaucoup, j’ai toujours le fol espoir de réussir à transférer des données de mon application vers Excel, ou d’Excel vers mon application avec un simple copier/coller. Malheureusement, cela n’est pas possible nativement mais on peut rapidement développer quelque chose qui répond à ce besoin.
Pour réaliser cette opération, nous aurons besoin de :
- un menu contextuel, associé à la table et de 2 actions copier/coller (facile à mettre en œuvre depuis l’App Designer, depuis la version R2020a),
- une fonction qui peut transférer de l’information vers et depuis le presse-papier (une bonne vieille fonction qui existe depuis 2006 : clipboard)
D’abord le design
La première étape consiste à créer une nouvelle App, et y ajouter une table :
Vous utilisez la fonction startupFcn pour remplir la table :

Ensuite le code
Copier : dans la jungle des fonctions de manipulation de chaînes de caractères, j’ai choisi la fonction sprintf pour transformer une ligne de la table. Cette fonction de bas niveau permet de gérer tout type de données et d’insérer facilement les tabulations. Traduire une ligne : Prénom (=chaine) / Min (=numérique) / Moyenne (=numérique) / Max (=numérique) se fait avec une instruction du style :
str = sprintf(‘%s\t%f\t%f\t%f’, prenom, min, moyenne, max);
Puis, pour concaténer les lignes entre elles, j’utilise la fonction de haut niveau strjoin en utilisant le retour à la ligne comme séparateur. Finalement, on obtient le code suivant pour copier la table dans le presse-papier :

Coller : pour interpréter la chaine de caractère issue d’Excel, j’utilise la fonction textscan, qui comme sprintf permet de choisir le format de décodage de la chaine de caractères. Mais attention, comme pour toute action de l’utilisateur, il faut vérifier qu’il essaie bien de coller quelque chose de compatible avec la table de données.
Si j’identifie un problème dans les données interprétées, j’alerte l’utilisateur avec un message :

On obtient alors :
Pour aller plus loin, on peut étoffer le code et faire en sorte de copier/coller une ligne ou une colonne pour obtenir ce type de fonctionnement :