Débutant cherche aide pour Origin
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 :oops:).
J'ai donc regardé l'aide, mais je n'arrive pas à trouver ce que je veux.
Voici le premier code de l'aide:
Code:
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:
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 :roll::
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