Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai une situation où j'ouvre des feuilles Excel en utilisant Open Database().
Cela a été une bonne façon de le faire puisque je veux des colonnes spécifiques à partir de feuilles spécifiques, donc utiliser une instruction SQL SELECT est idéal.
Je découvre maintenant qu'il n'y a pas de standardisation sur les noms de feuilles. Donc, ce que je veux faire, c'est interroger le classeur Excel et obtenir une liste de feuilles qu'il contient. Je peux ensuite utiliser un peu de logique dans mon code pour décider lesquels je veux réellement (car même s'il n'y a pas de standardisation, il y a suffisamment de "similitudes" pour que je puisse comprendre ce que je veux, en vérifiant si le nom de la feuille contient StringA ou StringB ou StringC par exemple)
Je n'ai aucune idée de comment cela peut être fait en JSL. En effectuant une recherche en ligne, il existe de nombreux exemples de code utilisant VBScripting, etc. qui renverront les feuilles dans un classeur Excel, mais cela n'aide pas beaucoup.
J'ai également essayé de trouver une instruction SQL qui le ferait, mais je ne connais pas de nom de table qui répertorierait les "tableaux"/feuilles du classeur.
Je sais que JMP peut le faire car si j'utilise Fichier -> Base de données -> Ouvrir la table et que je me connecte à une source de données Excel, il répertoriera toutes les feuilles disponibles dans la colonne Schémas - Tables. De même, si je définis une préférence utilisateur pour sélectionner des feuilles de calcul Excel individuelles et que j'utilise la commande Open(), il me demandera de sélectionner les feuilles que je souhaite ouvrir.
Ma question est donc la suivante : est-ce que quelqu'un sait si JMP expose cette capacité à comprendre les noms des feuilles Excel au langage de script ?
merci beaucoup
Thomas
Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?La dernière étape peut vous gâcher si vous avez des tableaux de données ouverts avant d'ouvrir les feuilles de calcul Excel.Une correction rapide est
pour (i=1, i <= nSheets, i++, nomdt = Tableau de données (je +compteAvant ) << obtenir le nom);
Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?Notez que le fragment de code ci-dessus a été corrigé.
Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?Voici une méthode très maladroite qui peut même ne pas être réalisable si les tables sont très grandes. Juste un fragment...
1. Définissez les préférences pour ouvrir toutes les feuilles Excel sur fichier>ouvrir.
2. countBefore = N Table();
3. Ouvrez le fichier Excel en utilisant open()
4. countAfter = N Table();
5. nFeuilles = countAfter - countBefore
5. nom_dt = {} ;
5. for(i=1, i <= nSheets, i++, nomdt = Table de données (i) << obtenir le nom);
Ensuite, dtname est une liste de noms de feuilles avec lesquels vous pouvez jouer et vous pouvez fermer les tables dont vous ne voulez pas.
Le message a été modifié par : mpb
Indexation corrigée dans le fragment de code.
Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?Il s'agit d'un vieux fil de discussion, mais je l'ai trouvé utile. Voici un script qui fera cela en ouvrant directement le contenu du fichier XLSX. Les fichiers XLSX sont simplement des fichiers ZIP avec une collection de fichiers XML qui définissent les propriétés, la structure et les éléments du classeur.
Names Default To Here( 1 );
filename = pick file("Choose Excel File", "$DOCUMENTS", {"Excel Files|xlsx"} );
zipxlsx = Open( filename, Zip );
zip_file = zipxlsx << read( "xl/workbook.xml", Format( blob ) );
// Open the file
zz = Open(
zip_file,
invisible,
xml,
XML Settings(
Stack( 0 ),
Row( "/workbook/sheets/sheet" ),
Col(
"/workbook/sheets/sheet/@name",
Column Name( "name" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best"} ),
Modeling Type( "Nominal" )
)
)
);
worksheets=(zz:name << get values);
close(zz, nosave);
write(worksheets);Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?
Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?Sérieusement ? Comment n'ai-je pas su ça ? Merci quand même, c'est très utile !
Re : Comment puis-je obtenir une liste de feuilles dans un classeur Excel ?Comment ne le saviez-vous pas... parce que vous êtes humain. Personne ne peut tout savoir sur JMP et puis tous les 18 mois environ, une pléthore de nouvelles fonctionnalités et fonctions sortent dans une nouvelle version. Personnellement, j'apprends tellement de choses grâce à vous et à vos contributions sur tellement de choses dans JMP que je ne connais pas ou dont je ne me souviens plus.