2011-01-26

Upload d'Excel vers Sharepoint 2010 - les mésaventures du copier-coller.

Petite opération triviale cette semaine qui a eu un petit contretemps. J'ai monté un gabarit de liste Sharepoint pour un client, rien de compliqué (une liste avec 6-7 champs, c'est tout). Le client aime, approuve, et demande qu'on transfère ses données Excel dans la liste.

Dans IE, c'est normalement une opération triviale aussi compliquée qu'un copier-coller. Il s'agit juste d'ouvrir la liste, de passer en mode feuilles de données et de faire ledit copier-coller.

Sauf que...

Dans le document Excel, j'ai un champ de long texte. J'ai créé son équivalent "Multiple lines of text" dans Sharepoint. pour pouvoir avoir les possibilités de texte enrichi (demandées par le client).

Et rien à faire, le copier-coller massif de plusieurs lignes ne fonctionne pas pour ce champ.

Solution simple: Copier-coller individuel. Dans la démo, j'avais 15-20 lignes, alors en quelques minutes c'était fait. Mais là j'en ai nettement plus, assez pour dire que
-C'est long
-C'est platte
-Plus on en fait, plus on ajoute de risques d'erreur

Solution à peine moins simple: une requête SQL. Bon, j'ai déjà eu accès à la BD SQL Server de Sharepoint et c'est assez spectaculairement mal fichu. Pas aussi pire que Great Plains, mais pas fort non plus.

Mais... mon vieil ami Access me permet de régler ça facilement. Depuis la version 2003 (qui reste ma version préférée d'Access), c'est possible de linker une liste Sharepoint (2007 ou 2010). Suffit de rentrer la bonne adresse, les credentials et voilà, tout le monde est content.

Mon idée est donc d'utiliser le mode feuilles de données de Sharepoint pour tous les champs, sauf celui qui ne marche pas (ma fameuse description longue). Ensuite, dans Access, j'importe juste les descriptions longues dans une autre table. Je lie les deux tables, requête update et voilà, c'est fait.

Mais comment linker les deux tables? Dans Excel, j'aurai pas accès à mon ID Sharepoint qui sera généré juste au moment d'insérer.

Je ne me suis pas cassé la tête, j'ai utilisé une méthode aussi simple qu'inefficace. J'ai ajouté une colonne dans Excel, donnant un numéro à chaque ligne ensuite (1, 2, 3, ...). Juste besoin de rentrer les trois premières lignes à bras et ensuite un drag and drop de ces cellules jusqu'à la fin, ça se fait en un rien de temps. Ensuite avant de faire un copier-coller dans Sharepoint, je crée une colonne NoTemp pour ça. Je fais mon copier coller, ça se remplit (attention: une ligne masquée dans Excel (hauteur = 0) ne sera pas prise en compte.

Ensuite je fais le même principe avec seulement la colonne NoTemp d'Excel et le texte de la description longue. Copier-coller, mais cette fois dans Access dans une table (paste append).

Ensuite c'est un jeu d'enfant de linker mes deux tables par NoTemp et de faire une requête Update... et évidemment, ensuite, d'aller supprimer dans Sharepoint ma colonne NoTemp temporaire pour éviter au client de voir ça!

Bref, pas mal de zigonnage pour quelque chose qui aurait dû être plus simple.