Set the LabTalk formula and optional Before Formula Script for Column and MatrixObject.
BOOL SetFormula( LPCSTR lpcszFormula, int nAutoUpdate = AU_NONE, int nBegin = -1, int nEnd = -1, BOOL bUndo = FALSE, UINT nRefColUID = 0 )
Returns TRUE on success and FALSE on failure.
EX1
// Create a worksheet with column formulas in place and to run it void DataObject_SetFormula_Ex1() { Worksheet wks; wks.Create("origin", CREATE_VISIBLE); wks.AddCol(); Column col; col.Attach(wks, 0); col.SetFormula("5*(i-1)"); col.ExecuteFormula(); // next two column we will set Recalculate = Auto col.Attach(wks, 1); col.SetFormula("sin(4*col(A)*pi/180)", AU_AUTO); col.ExecuteFormula();// this step is needed to initiate Recaulation // using declared variables in Before Formula Script col.Attach(wks, 2); string strExpression = "cos(Amp*x*pi/180)"; string strBeforeScript = "double Amp=4.5;" + "\r\n" + "range x=col(A);"; string strFormula = strExpression + STR_COL_FORMULAR_SEPARATOR + strBeforeScript; col.SetFormula(strFormula, AU_AUTO); col.ExecuteFormula(); }
EX2
void DataObject_SetFormula_Ex2() { MatrixPage mp; mp.Create("origin"); MatrixLayer ml = Project.ActiveLayer(); if ( !ml ) { printf("Can not access active matrixsheet"); return; } MatrixObject mo = ml.MatrixObjects(0); //get first matrixobject mo.SetFormula("sin(i) + cos(j)"); mo.ExecuteFormula(); }
You can also use this method to set the Before Formula Script. This additional script is appended to the formula string by a separator string:
#define STR_COL_FORMULAR_SEPARATOR ";\r\n#"
You can use the STR_COL_FORMULAR_SEPARATOR in your code if you don't want to hard code this separator. This marco has been defined in oc_sys.h file in \OriginC\system folder, so can use it directly.
For the formula, see Set Column Value dialog for more sample.
DataObject::GetFormula, DataObject::ExecuteFormula
origin.h