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:
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");
Remarque: ac code crée à chaque fois un nouveau classeur. Je souhaite importer à chaque fois mes data à partir de la colonne 1, ligne 1

deuxième code:
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");    
}
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".

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