Bonjour le forum,
Voilà, je suis un utilisateur du programme Origin.
Je souhaiterai effectuer un petit programme pour ouvrir et importer un document dans mon classeur, une sorte de macro quoi !!
Ce genre de "petit programme" est facile à faire sous excel, mais sous Origin, qui utilise une sorte de language C, j'avoue ne pas tout comprendre (les cours de C remonte à bien longtemps).
J'ai donc regardé l'aide, mais je n'arrive pas à trouver ce que je veux.
Voici le premier code de l'aide:
Remarque: ac code crée à chaque fois un nouveau classeur. Je souhaite importer à chaque fois mes data à partir de la colonne 1, ligne 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 void Datasheet_ImportASCII_Ex2() { ASCIMP ai; string strFile = GetOpenBox("*.dat"); // or "*.txt" if(strFile.IsEmpty()) return;// user cancel if(AscImpReadFileStruct(strFile, &ai)==0) { ai.iAutoSubHeaderLines = 0; //set auto detected to false since will set sub header to col label by below codes ai.iSubHeaderLines = 4; // 1. LongName 2. Units 3. Expanded Discription(User defined) 4. Type Indication(User defined) // Notice when iAutoSubHeaderLines is 0, the index of ai.nLongName, ai.nUnits and ai.nFirstUserParams are begin from Main Header ai.nLongNames = ai.iHeaderLines; ai.nUnits = ai.iHeaderLines + 1; ai.nFirstUserParams = ai.iHeaderLines + 2; ai.nNumUserParams = 2; ai.iMaxLabels = 0; // Not set any header line to Comments label Worksheet wks; wks.Create(); if(0 == wks.ImportASCII(strFile, ai)) { // Set user parameter labels to specified names Grid grid; grid.Attach(wks); vector<string> vsUserLabels = {"Expanded Discription", "Type Indication"}; grid.SetUserDefinedLabelNames(vsUserLabels); wks.AutoSize(); // to resize worksheet. This method is very useful when data/text is longer than the width of cell } } else out_str("failed to read ascii file");
deuxième code:
Remarque: ce code ajoute les colonnes aux colonnes existantes. A chaque nouvel import de data, je souhaite que les anciennes soit effacées et les nouvelles "copiées" en "A1".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void Datasheet_ImportASCII_Ex3() { Worksheet wks = Project.ActiveLayer(); if(!wks) { out_str("no acitve workbook window to import data"); return; } ASCIMP ai; string strFile = GetAppPath(1) + "Samples\\Curve Fitting\\Step01.dat"; if(!strFile.IsFile()) { strFile = GetOpenBox("*.dat"); // or "*.txt" if(strFile.IsEmpty()) return;// user cancel } if(AscImpReadFileStruct(strFile, &ai)==0) { ai.iMode = ASCIMP_MODE_APPEND_COLS; // append imported data to this worksheet ai.iRenameCols = 0; // 0 to keep default column name ai.iPartial = 1; // 1 to specify partial import ai.iPartialC1 = 1; // import from 2nd column (0 offset) ai.iPartialC2 = 4; // set the last column, so here just import 4 columns ai.iPartialR1 = 0; // set the import row from ai.iPartialR2 = 9; // set the import row to int nRet = wks.ImportASCII(strFile, ai); out_int("nRet = ", nRet); if(0 == nRet) wks.AutoSize(); // to resize worksheet. This method is very useful when data/text is longer than the width of cell } else out_str("failed to read ascii file"); }
Une autre remarque: j'aurai ensuite dans mon classeur des colonnes avec des formules, dont le calcul sera automatique mais qui utilisent les data importées.
Voici donc mes questions:
1) comment faire pour les data soient importées toujours sur le même classeur, toujours à la même "cellule" (tout en choississant le fichier via une boite de dialogue)
2) dans les deux programmes ci dessus, à quoi sert la deuxième boucle
"if" (en rouge dans les codes)?? A arrêter l'ouverture et l'importation des datas?
Voilà, j'espère que je suis clair
Merci d'avance de votre aide,
Johann
Partager