SIGMAPLOT MACRO SAMPLE CODE

Some very useful programming procedures have been developed for the macros distributed with SigmaPlot. Some of these code samples, and an example macro where each has been used, are described here.

Code SampleMacroFunction
Populate ArrayBatch Process Excel FilesPopulates array with specific notebook items
Empty ColumnArea Below CurvesDetermines if a worksheet column is empty
Create WorksheetFrequency PlotCreates worksheet object and opens it
Find PlotsColor Transition ValuesCreates current page and graph objects; generates list of plots in graph
First Empty ColumnArea Below CurvesDetermine range of worksheet data; find first empty column
List of Data ColumnsF-test Comparison of CurvesCreates list of columns containing data
First EmptyPower Spectral DensityCreates "first empty" column option in dialog box
TransformF-test Comparison of CurvesCreates and runs a transform
ReportsF-test Comparison of CurvesCreates and numbers reports
Column LengthF-test Comparison of CurvesReturns column length
Fit LibraryBatch Process Excel FilesOpens and defines a fit library
Curve FitBatch Process Excel FilesRuns a curve fit
Select PlotBatch Process Excel FilesSelects the current plot
Call Automated ApplicationPaste to PowerPoint SlideCalls another automated application like PowerPoint or Word
Column titleRank and PercentileAdds a column title

Populate Array

Creates an array populated by a specific set of notebook items, in this case, equation names. The item type is specified using the ItemType property where ItemType = 6 corresponds to a fit item (equation).

DIM ITEMLIST$()

DIM I, INDEX AS INTEGER

I=0

INDEX = 0

FOR I = 0 TO FITFILE.NOTEBOOKITEMS.COUNT - 1

       IF FITFILE.NOTEBOOKITEMS(I).ITEMTYPE = 6 THEN

              REDIM PRESERVE ITEMLIST$(INDEX)

              ITEMLIST(INDEX) = FITFILE.NOTEBOOKITEMS(I).NAME

              INDEX = INDEX + 1

       END IF

NEXT I
Empty Column

This subroutine determines if a column is an empty column.

PUBLIC FUNCTION EMPTY_COL(COLUMN AS VARIANT, COLUMN_END AS VARIANT)

'DETERMINES IF A COLUMN IS EMPTY

       DIM WORKSHEETTABLE AS OBJECT

       SET WORKSHEETTABLE = ACTIVEDOCUMENT.CURRENTDATAITEM.DATATABLE

       DIM I AS LONG

       DIM EMPTY_CELL AS BOOLEAN

       

       FOR I = 0 TO COLUMN_END STEP 3 'CHANGE THE STEP VALUE TO CHANGE 
       THE SAMPLING INTERVAL. SMALL SAMPLE SIZE = SLOW OPERATION

              IF WORKSHEETTABLE.CELL(COLUMN,I) = "-1.#QNAN" THEN EMPTY_CELL = TRUE

              IF WORKSHEETTABLE.CELL(COLUMN,I) <> "-1.#QNAN" THEN GOTO NOTEMPTY

       NEXT I

       EMPTY_COL = EMPTY_CELL

       GOTO EMPTYCOL:

       NOTEMPTY:     

       EMPTY_COL = FALSE

       EMPTYCOL:

END FUNCTION
Create Worksheet

Creates an object consisting of the current Worksheet.

DIM CURRENTWORKSHEET

SET CURRENTWORKSHEET = ACTIVEDOCUMENT.CURRENTDATAITEM

CURRENTWORKSHEET.OPEN 'OPENS/SELECT DEFAULT WORKSHEET AND SETS FOCUS
Find Plots

Creates objects consisting of the current Page and Graph, and generates a list of Plots for the Graph.

DIM INDEX, SPPAGE, SPGRAPH, NUMBERPLOTS, PLOTLIST$()

SET SPPAGE = ACTIVEDOCUMENT.CURRENTPAGEITEM

SPPAGE.OPEN

SET SPGRAPH = SPPAGE.GRAPHPAGES(0).CURRENTPAGEOBJECT(GPT_GRAPH)

NUMBERPLOTS = SPGRAPH.PLOTS.COUNT

REDIM PLOTLIST$(NUMBERPLOTS - 1)

FOR INDEX = 0 TO NUMBERPLOTS - 1

       PLOTLIST(INDEX) = SPGRAPH.PLOTS(INDEX).NAME

NEXT INDEX
First Empty Column

Determines the data range and defines the first empty column (=LastColumn+1).

DIM WORKSHEETTABLE AS OBJECT

SET WORKSHEETTABLE = ACTIVEDOCUMENT.CURRENTDATAITEM.DATATABLE

DIM LASTCOLUMN AS LONG

DIM LASTROW AS LONG

LASTCOLUMN = 0

LASTROW = 0 

WORKSHEETTABLE.GETMAXUSEDSIZE(LASTCOLUMN,LASTROW)
List of Data Columns

Sorts through columns and creates a list of data columns. The list consists of column numbers or column titles if they exist. Uses object definitions from code examples above, as well as the empty_col function in the Empty Column description above.

DIM USEDCOLUMNS$(), LISTEDCOLUMNS(), LISTINDEX, COLCONTENTS, COLTITLE

REDIM USEDCOLUMNS$(LASTCOLUMN -1)

REDIM LISTEDCOLUMNS(LASTCOLUMN -1)

LISTINDEX = 0

FOR INDEX = 0 TO LASTCOLUMN - 1

       COLCONTENTS = EMPTY_COL(INDEX, LASTROW) 

       COLTITLE = WORKSHEETTABLE.CELL(INDEX,-1) 'RETRIEVE COLUMN TITLE

       IF COLCONTENTS = TRUE THEN GOTO NEXTINDEX

       IF COLCONTENTS = FALSE THEN   'IF THE FIRST CELL IS NOT EMPTY

              SELECT CASE COLTITLE

              CASE "-1.#QNAN"

                     USEDCOLUMNS$(INDEX) = "COLUMN " + CSTR(INDEX + 1)

                     LISTEDCOLUMNS(LISTINDEX) = CSTR(INDEX + 1)

                     LISTINDEX = LISTINDEX + 1

              CASE ELSE

                     USEDCOLUMNS$(INDEX) = COLTITLE 'IF TITLE IS PRESENT USE TITLE

                     LISTEDCOLUMNS(LISTINDEX) = CSTR(INDEX + 1)

                     LISTINDEX = LISTINDEX + 1

              END SELECT

       END IF

       NEXTINDEX:

NEXT INDEX
First Empty

Creates a “First Empty” column option in a dialog box.

BEGIN DIALOG USERDIALOG 391,104,"EMPTY COLUMN" ' %GRID:10,7,1,0

       OKBUTTON 283,11,96,19

       TEXT 14,10,120,14,"&RESULT COLUMN",.TEXT1

       TEXTBOX 155,9,90,18,.RESULTSCOL

END DIALOG

DIM DLG AS USERDIALOG

IF DLG.RESULTSCOL = "" THEN DLG.RESULTSCOL = "FIRST EMPTY"

WORKSHEETTABLE.GETMAXUSEDSIZE(LASTCOLUMN,LASTROW) 'RE-INITIALIZE VARIABLES

IF     DLG.RESULTSCOL = "FIRST EMPTY" THEN

       DLG.RESULTSCOL = CSTR(LASTCOLUMN + 1)

ELSE

       DLG.RESULTSCOL = DLG.RESULTSCOL

END IF
Transform

Creates and runs a transform. 9 is the item type for a transform.

DIM SPTRANSFORM AS OBJECT

SET SPTRANSFORM = ACTIVEDOCUMENT.NOTEBOOKITEMS.ADD(9)

SPTRANSFORM.OPEN

SPTRANSFORM.TEXT = "<TRANSFORM TEXT>" 

'USE + VBCRLF + _ TO CREATE A LINE BREAK

'*****************************************************

'* DEBUG TRANSFORM CODE; THIS OPENS THE TRANSFORM IN *

'* THE TRANSFORMS DIALOG FOR VIEWING AND EDITING     *

'*****************************************************

'SPTRANSFORM.RUNEDITOR 

SPTRANSFORM.EXECUTE

SPTRANSFORM.CLOSE(FALSE)

HERE IS THE TRANSFORM TEXT FROM F-TEST COMPARISON OF CURVES

'APPROXIMATE P VALUE FOR F DISTRIBUTION A&S, EQ. 26.6.15, P. 947

'NORMAL DISTRIBUTION APPROXIMATION FOR P VALUE A&S, EQ. 26.2.17, P 932

SPTRANSFORM.TEXT = "N=SIZE(COL(" +CS1+ "))" + VBCRLF + _

"SS1=TOTAL(COL(" +CS1+ ")^2)"  + VBCRLF + _

"SS2=TOTAL(COL(" +CS2+ ")^2)" + VBCRLF + _

"F = ((SS1-SS2)/SS2)*((N-" +N2+ ")/(" +N2+ "-" +N1+ "))" + VBCRLF + _

"N1=" +N2+ "-" +N1+ VBCRLF + _

"N2=N-" +N2+ VBCRLF + _

"X=(F^(1/3)*(1-2/(9*N2))-(1-2/(9*N1)))/SQRT(2/(9*N1)+F^(2/3)*2/(9*N2))" + VBCRLF + _

"PI=3.1415926" + VBCRLF + _

"Z=EXP(-X^2/2)/SQRT(2*PI)" + VBCRLF + _

"T=1/(1+.2316419*X)" + VBCRLF + _

"P=Z*(.31938153*T-.356563782*T^2+1.781477937*T^3-1.821255978*T^4+1.3374429*T^5)" +

VBCRLF + _

"COL(" +CRES+ ")={" + CHR(34) + "F =" + CHR(34) + SEPARATOR + " " + CHR(34) + "P =" +

CHR(34) + "}" + VBCRLF + _

"COL(" +CRES+ "+1)={F" + SEPARATOR + "P}" + VBCRLF

"P=Z*(.31938153*T-.356563782*T^2+1.781477937*T^3-1.821255978*T^4+1.3374429*T^5)" +

VBCRLF + _

"COL(" +CRES+ ")={" + CHR(34) + "F =" + CHR(34) + SEPARATOR + " " + CHR(34) + "P =" +

CHR(34) + "}" + VBCRLF + _

"COL(" +CRES+ "+1)={F" + SEPARATOR + "P}" + VBCRLF
Reports

Creates and numbers reports.

DIM SPREPORT AS OBJECT

SET SPREPORT = ACTIVEDOCUMENT.NOTEBOOKITEMS.ADD(CT_REPORT)

SPREPORT.NAME = "<NAME OR TYPE> " + SPREPORT.NAME

SPREPORT.TEXT = "<REPORT TEXT>"

HERE IS THE REPORT NAME AND TEXT FROM F-TEST COMPARISON OF CURVES

SPREPORT.NAME = "F-TEST " + SPREPORT.NAME

IF VAR2>0.05 THEN

       GOTO LABEL2 

END IF

IF VAR2<0.05 THEN

       GOTO LABEL1

END IF

LABEL1:

SPREPORT.TEXT = "F= "+VAR1+VBCRLF+"P= "+VAR2+VBCRLF+"THE MORE COMPLEX 
EQUATION PROVIDES A SIGNIFICANTLY BETTER FIT."

GOTO FINISH

LABEL2:

SPREPORT.TEXT = "F= "+VAR1+VBCRLF+"P= "+VAR2+VBCRLF+"THE MORE COMPLEX 
EQUATION DOES NOT PROVIDE A SIGNIFICANTLY BETTER FIT."

GOTO FINISH

Column Length

Returns column lengths.

PUBLIC FUNCTION COLUMN_SIZE(COLUMN AS VARIANT, COLUMN_END AS VARIANT)

'RETURNS COLUMN SIZE OF ENTRIES WITHIN A RANGE

       DIM WORKSHEETTABLE AS OBJECT

       SET WORKSHEETTABLE = ACTIVEDOCUMENT.CURRENTDATAITEM.DATATABLE

       DIM I

       DIM SIZE AS LONG

              I = 0

              SIZE = 0

       DO 

              IF WORKSHEETTABLE.CELL(COLUMN,I) <> "-1.#QNAN" THEN SIZE = SIZE + 1

              I = I + 1

       LOOP UNTIL I = COLUMN_END

       COLUMN_SIZE = SIZE

END FUNCTION

Fit Library

Opens and defines a Curve Fitting Library.

DIM FITLIBRARY$

'DEFINES THE EQUATION SOURCE.  EDIT TO USE A DIFFERENT FIT LIBRARY

FITLIBRARY = "STANDARD.JFL"

'OPEN THE FIT LIBRARY

NOTEBOOKS.OPEN(PATH + "\" + FITLIBRARY, ".JFL")

DIM FITFILE AS OBJECT

SET FITFILE = NOTEBOOKS(PATH + "\" + FITLIBRARY)

FITFILE.VISIBLE=FALSE

Curve Fit

Example of running a Curve Fit; uses fit library defined above. Modify the various properties to suit your application.

DIM FITEQUATION$

FITEQUATION = "<EQUATION NAME>"

DIM FITOBJECT AS OBJECT

SET FITOBJECT = FITFILE.NOTEBOOKITEMS(FITEQUATION)

FITOBJECT.OPEN

FITOBJECT.DATASETTYPE = CF_XYPAIR

FITOBJECT.VARIABLE("X") = "COL(1)"

FITOBJECT.VARIABLE("Y") = "COL(2)"

FITOBJECT.RUN

FITOBJECT.OUTPUTREPORT = TRUE

FITOBJECT.OUTPUTEQUATION = FALSE

FITOBJECT.RESIDUALSCOLUMN = -1

FITOBJECT.PREDICTEDCOLUMN = -1

FITOBJECT.PARAMETERSCOLUMN = -1

FITOBJECT.OUTPUTGRAPH = FALSE

FITOBJECT.OUTPUTADDPLOT = TRUE 'A PLOT MUST BE SELECTED AND THE PAGE OPENED

FITOBJECT.EXTENDFITTOAXES = TRUE

FITOBJECT.ADDPLOTGRAPHINDEX = 0

FITOBJECT.XCOLUMN = -1

FITOBJECT.YCOLUMN = -1

FITOBJECT.ZCOLUMN = -2

FITOBJECT.FINISH

Select Plot

Selects the current plot. The plot must be selected to modify its properties.

DIM SPPAGE

SET SPPAGE = ACTIVEDOCUMENT.CURRENTPAGEITEM

SPPAGE.GRAPHPAGES(0).GRAPHS(0).PLOTS(0).SELECTOBJECT

SPPAGE.OPEN
Call Automated Application

Calls another automated application (in this case, PowerPoint). Note that in order to call objects, properties and methods from the other application, you must also add it as a Reference. Use the Macro References button in the SigmaPlot macro editor.

DIM PPAPP AS OBJECT

SET PPAPP=CREATEOBJECT("POWERPOINT.APPLICATION")

PPAPP.VISIBLE=TRUE
Column Title

Adds a column title to a column in the worksheet.

DIM WORKSHEETTABLE AS OBJECT

SET WORKSHEETTABLE = ACTIVEDOCUMENT.CURRENTDATAITEM.DATATABLE

WORKSHEETTABLE.NAMEDRANGES.ADD("<TITLE>", <COLUMN NUMBER>,0,1,-1, TRUE)