Comment enregistrer une table en tant que nom de variable, compte tenu de l'année des données ?Par exemple : j'ai deux fichiers Excel : 2014.xlsx, 2015.xlsx, et j'aimerais automatiser après avoir sélectionné ces plusieurs fichiers pour nommer des feuilles de calcul spécifiques dans ces fichiers (dans ce cas, {Product Events, Products, CodesFrmPLI}), pour un total de 6 tables JMP différentes : les exemples de noms seraient Product_Events_2014, Product_Events_2015, Products_2014, Products_2015, CodesFrmPLI_2014, CodesFrmPLI_2015 dans ce cas.
Names Default To Here( 1 );
Close All( data tables );
Delete Symbols();
Directory = Pick Directory( "Select a directory" );
Files = Pick File(
"Select Data Set(s)",
Directory,
{"All Files|*", "JMP Files|jmp;jsl;jrn", "Excel Files|xlsx"},
1,
0,
"",
"multiple"
);
For( i = 1, i <= N Items( Files ), i++,
Try( Open( Files[i],
Worksheets( NWorksheet = {"Product Events", "Products", "CodesFrmPLI"}),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 1 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" ),
invisible
) )
));
Show(NWorksheet);
//*** 2014 Naming convention
For( i = 1, i <= N Items( Files ), i++,
if( Contains( Files[i] , "2014") > 0,
dt = Data Table(1);
dt << Save("Codes_2014.jmp");
dt = Data Table(2);
dt << Save("Products_2014.jmp");
dt = Data Table(3);
dt << Save("Product Events_2014.jmp");
//Close All(Data Tables, No Save);
)
);
//*** 2015 Naming convention
For( i = 1, i <= N Items( Files ), i++,
if( Contains( Files[i] , "2015") > 0,
dt = Data Table(4);
dt << Save("Codes_2015.jmp");
dt = Data Table(5);
dt << Save("Products_2015.jmp");
dt = Data Table(6);
dt << Save("Product Events_2015.jmp");
//Close All(Data Tables, No Save);
)
);Re : Comment enregistrer une table en tant que nom de variable, compte tenu de l'année des données ?Si vous supprimez simplement la ligne
close( dt, save( extractList[1] || "_" || theYear || ".jmp" ) );
Les tableaux de données resteront ouverts.Par conséquent, vous pouvez ajouter les jointures ou les calculs de votre choix après le ")" de fermeture pour la boucle For() initiale.Fondamentalement, après la dernière ligne du script actuel.
Re : Comment enregistrer une table en tant que nom de variable, compte tenu de l'année des données ?Merci Jim. Cela a fonctionné. Suivi rapide : si je souhaite maintenant effectuer la jointure de tables et la manipulation de données, quel serait le meilleur endroit pour cela ?
Salutations.
Re : Comment enregistrer une table en tant que nom de variable, compte tenu de l'année des données ?Je pense que la refonte ci-dessous de votre script vous mènera là où vous voulez ....... Je n'avais pas un environnement de test très étendu, mais je pense que le code est assez proche de ce dont vous avez besoin :
Names Default To Here( 1 );
Close All( data tables );
Delete Symbols();
Directory = Pick Directory( "Select a directory" );
Files = Pick File(
"Select Data Set(s)",
Directory,
{"All Files|*", "JMP Files|jmp;jsl;jrn", "Excel Files|xlsx"},
1,
0,
"",
"multiple"
);
// Place the names of the spreadsheets to be input into a list
spreadsheetList = {"Product Events", "Products", "CodesFrmPLI"};
For( i = 1, i <= N Items( Files ), i++,
// For this file, determine the year
If(
Contains( Files[i], "2014" ), theYear = "2014",
Contains( Files[i], "2015" ), theYear = "2015"
);
// Read in separately each separate spreadsheet
For( k = 1, k <= N Items( spreadsheetList ), k++,
// Create a list that will contain the current spreadsheet to
// be read in
extractList = {};
Insert Into( extractList, spreadsheetList[k] );
// Open the spreadsheet
Try(
dt = Open(
Files[i],
Worksheets( NWorksheet = extractList ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 1 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" ),
invisible
)
)
);
// The name for the JMP file is the same as the spreadsheet name,
// except for the Codes, so make the change
If( extractList[1] == "CodesFrmPLI",
extractList[1] = "Codes"
);
// Save the JMP file with the prescribed name
close( dt, save( extractList[1] || "_" || theYear || ".jmp" ) );
);
);