Xess Spreadsheet for UNIX, OpenVMS,and Windows NT

        Copyright 1990 - 1997 Applied Information Systems, Inc.
                         Chapel Hill, NC, USA
                         All Rights Reserved

XESS Home Page


Xess is an advanced spreadsheet designed specifically for the X Windows environment with network interoperability. By using the intuitive Xess user interface, you can easily access its powerful computational and graphical tools.

The Xess spreadsheet provides a flexible and comfortable visual environment in which to handle complex calculations and data manipulations. It calculates a full range of mathematical, statistical, matrix and string functions -- all with the ease of a familiar spreadsheet format with point-and-click screen displays and pull-down menus.

Like those in other spreadsheets, cells in an Xess spreadsheet contain constant numeric values, text strings, and formulas that calculate new values. However, with its extensive range of features and functions designed for the advanced user, Xess defines a new generation of spreadsheets.

A powerful feature of Xess is its understanding that the world does not stand still. In a world of spreadsheets that only capture a snapshot in time, Xess Connection applications are a step up to live action -- capable of sending and receiving data and instructions from other X Windows programs, even on other computers, and automatically recalculating every referenced area as it goes.

This capability allows Xess to monitor and display data from multiple sources as it is calculated and to pass this information to other programs in a real-time environment.

A toolkit (API) is provided which makes it easy for C or Fortran programmers to develop customized applications or even extensions to the spreadsheet itself.

The entire spreadsheet environment can be customized to reflect specific user or site preferences. This includes short-cut accelerator keys and start-up defaults.


Calculations

Overview

Xess supports "natural order" recalculation, which is a method of ordering the computations such that each cell's value is computed only after the values for all cells on which it depends have been computed. Natural order recalculation guarantees that cells are always computed correctly, regardless of the order in which the cell formulas were entered. Iconified sheets are recalculated the same as visible sheets.

Recalculation options include:

These options are set in the Recalc Options Dialog.

Mode of Recalculation

Xess supports two modes of recalculation: Manual and Automatic. When Manual is set, formulas are only recomputed when an explicit recalculation operation is requested from the Tools menu. When Automatic is set, any action which causes the contents of a cell to change will automatically trigger recalculation. Automatic recalculation is further controlled by Method of Recalculation: Foreground and As Needed.

Method of Recalculation

When the mode of recalculation is set to Automatic, recalculation is defined further by the following methods: Foreground and As Needed.

When Foreground is set Xess enforces "minimal" recalculation, which means only the cells throughout the entire spreadsheet which are potentially affected by an operation which you perform (such as editing a cell, or moving a range of cell) are recalculated. This feature minimizes the work performed during recalculation and thus speeds up your computations. Minimal recalculation is in effect whenever the recalculation mode in the Recalc Options dialog is set to Automatic and the method is set to Foreground.

As Needed Method of Recalculation

When As Needed is set Xess enforces "frugal" recalculation, which means that recalculation performance is further optimized beyond what is achieved when the method is set to Foreground.

The performance gain in recalculation can be significant, depending on the size and complexity of the sheet. Frugal recalculation is in effect whenever the recalculation mode in the Recalc Options dialog is set to "Automatic" and method is set to "As Needed".

Note that As Needed does not currently support Constraint Checking and Iterative Recalculation.

Cyclic Dependencies/Iterative Recalculation

Normally, a formula in a given cell should not depend on that cell itself, either directly or indirectly. Such a condition is called a "cyclic dependency." When cyclic dependencies exists, the rule for natural order recalculation as described above does not make sense. When you enter a formula which creates a cyclic dependency, the message "Cycle!" is displayed in the cell.

In some cases cyclic dependencies are useful in that they can represent "iterative" calculations, which Xess supports. Iterative calculation in Xess is useful when two or more cells mutually depend on each other such that each time they are recalculated, their values become closer and closer to the desired answer.

When the "Iteration Limit" field is set to a non-zero value, iterative calculation is enabled. In this mode, Xess will make multiple recalculation passes, still preserving the natural order and minimal recalculation rules described above, until either the iteration limit has been reached or, if constraint checking is enabled, until all constraints are satisfied, whichever comes first.

Precision

Xess performs all non-integer calculations in double-precision binary floating point (scientific) notation. This provides approximately 15 or 16 decimal digits of accuracy.

Calculations with logical operators -- ! (logical NOT), && (logical AND), || (logical OR), and ?: (conditional) -- consider a non-zero value to be True and a zero value to be False. Integer operators -- ~ (complement), & (bitwise AND), | (bitwise OR), ^ (bitwise EXCLUSIVE-OR), and % (modulus) convert their operands to 32-bit integers before performing the operation.

Formulas

Formulas are the backbone of the spreadsheet, establishing and calculating mathematical relationships between elements of the spreadsheet. Whereas numeric entries remain the same until you change them, cells defined by formulas are automatically changed to reflect changes in referenced cells -- even where there are complex inter-dependencies among cells.

Xess formulas can calculate with numbers, text, logical values, cell references, and other formulas. For example, you can easily calculate the sum of a series of cells, the total of values in a column, a minimum or maximum value within a range, the rounded result of another formula, or the absolute value of a cell entry. Formulas can express complex inter-dependencies among cells, and they can define constraints on the calculation, such as limits on acceptable resulting values or specific conditions under which a calculation should take place.

Once entered in a cell, formulas are hidden behind the scenes, perform their work in the background, and display only the result of their calculation. To view the formula in a cell, position the cell cursor to the desired cell. Xess displays the formula in the Edit Line of the spreadsheet area, if one exists.

If the Edit Line is not being displayed, you will need to initiate cell editing by pressing [F2]. The cell formula will now be shown in the cell.

Xess also provides a wide array of functions. Functions are predefined formulas that perform certain tasks. Some functions are used alone; others are used within formulas. Xess provides many specialized functions spreadsheets for almost any application area.

For more information, see:
Cell Contents
Cell Defaults
Cell Formats
Cell References
Formulas
Functions
Embedded Tools


Case/Accent Sensitivity

You may choose whether or not (and, if so, how) Xess distinguishes between upper/lower case and accented/unaccented characters by selecting the desired options described in Collating Options. These settings affect Sort, Find, Extract and strings comparisons in @IF, @REGEX, @HLOOKUP, and @VLOOKUP functions.

Cell Attributes

Cell attributes may be defined on an individual cell basis or for all cells in the sheet. Settings applied to specific cells override the default cell attributes for the entire sheet.

The following attributes are supported:

For information:
Cell Attributes - assigning per cell
Cell Attributes - global defaults

Cell Attributes - assigning per cell

There are three (3) ways to assign most of the attributes supported by Xess: To assign a cell attribute for one or more cells:
  1. Select the cells to be affected.
  2. Invoke the desired Format option via any one of the three methods described.
  3. If you are using a dialog box, you must click OK or Apply to complete the operation.
To set the protection attribute, select Cell Protection under the Tools menu. You must also enable protection from the Sheet Defaults Dialog.

Cell Attributes - global defaults

Default attributes for all cells in the sheet are controlled by the Cell Defaults Dialog which is invoked from the Options menu.

Cell Border Defaults Dialog

The Cell Border Defaults Dialog lets you set the default styles and colors to be used for cell borders. These defaults are used the the Cell Border Dialog.

Cell Border Dialog

You can place horizontal and vertical borders around a cell or range of cells. These borders are visible on the display and in printed output, and are saved with the sheet. Cell borders can be any of the colors in the color palette and can be of a variety of styles.

There are two typical ways to use cell borders. The first places borders around each cell. The second places a single border around a group of cells.

To place borders on each cell in a range of cells:

  1. Select the range of cells. If nothing is selected, the current cell is affected.
  2. Choose Cell Borders... from the Format menu.
  3. In the Cell Borders dialog, choose the color and border style for the left, right, top, and bottom borders. The default border style is no border. Click OK.
To place an outline border around a range of cells:
  1. Select the range of cells. If nothing is selected, the current cell is affected.
  2. Choose Cell Borders... from the Format menu.
  3. In the Cell Borders dialog, choose the color and border style for the outline. Click OK.

Cell Color Dialog

You may assign both background and foreground color to any cell. Use one of the three methods described in Cell Attributes - assigning per cell to display the Color dialog box. You may then change the color palette.
  1. By making your selections in the appropirate list boxes, you can change:
  2. Click OK or APPLY to update the colors.

Cell Contents

Xess accepts six basic types of cell entries:

Text (Label) Entries

Text entries are useful for labeling columns and rows, for including comments about data values being calculated, and for using Xess to manage textual information, such as names, addresses or whatever your application may require. Depending upon the locale and resource settings, Xess accepts any 8-bit character contained in the currently defined character set. The default settings support the ISO Latin 1 character set used by most Western European languages.

Numeric Values

If a cell entry begins with a digit from 0 - 9, Xess assumes that you are typing a formula and it prepends the value with an equals ("=") sign. Xess also recognizes the following symbols as indicators of numeric entries.
                + - .
You can format numeric values to be displayed in several ways, even as dates or times that are entered as numbers but displayed in the specified date or time format.

Dates and Times

Dates and times are stored in Xess as double precision floating point numbers representing the number of days since December 31, 1899. For example, 12:00 noon on January 2, 1900 is represented by the value 3.5, since it is exactly 3.5 days after midnight, December 31, 1899.

To tell Xess to interpret the entry as a date or time and not a formula, you must change the cell format to one of the date/time formats before entering the contents of the cell, or use a date function.

You can use a shorthand method for entering dates. Type a slash (/) followed by any supported date format such as: /mm/dd/yy, /dd-mmm-yy, /dd.mmm.yy. The date or time entered with this method is converted to the equivalent date and time value.

Xess provides a rich set of built-in functions and formats for manipulating and displaying date and time values.

Formulas

Formulas establish and calculate mathematical relationships between elements of the spreadsheet. Xess formulas can calculate with numbers, text, logical values, cell references and other formulas. For example, you can easily calculate the sum of a series of cells, the total of values in a column or the absolute value of another cell entry.

Graphs

When a graph is inserted in the spreadsheet, the top left anchor cell contains the "//gx" where x is a graph number assigned when the graph was saved in the Graph Editor. You can manually insert a graph in a cell, by entering the special graph string directly into the cell.

Images

When an image link is inserted in the spreadsheet, the top left anchor cell contains the "//i=" followed by locator information for the image.

Cell Defaults Dialog

The Cell Defaults dialog allows you to define the default appearance of cells in the spreadsheet. This includes the format and number of decimal places for displaying numeric data, and the default font, which applies to text as well as numeric data.

To set the Cell Defaults:

  1. Select Cell Defaults... from the Options menu. Xess displays the Cell Defaults dialog box to specify the characteristics. Select and modify any of the following options:

    The color palette displayed in the Cell Colors Dialog can be changed with resources to have up to 63 colors.

  2. Click OK or press [Return] to confirm and apply your formatting to the whole spreadsheet. Click Apply to apply the changes and retain the dialog box. Click Cancel to dismiss the dialog box.

Cell Formats

Formats can be defined globally or on a cell-by-cell basis. Using any one of the several approaches you can tell Xess to display a date in MMM-YY, DD-MMM-YY or DD-MMM format. You can display numbers in a variety of formats such as scientific notation, hexadecimal representations, dollars, or with commas separating the thousands, millions, etc. You can request that Xess hide the contents of a cell. Individual cell formats are set as described in Cell Attributes - assigning per cell. Global cell formats are set in the Cell Defaults Dialog. Formatting selections include the following:
        Default         Restore the cell format and decimal places
                        to the values selected on the Cell Defaults
                        options dialog.

        Scientific      in scientific notation (exponentiation)

        Fixed           using a fixed number of decimal places

        General         in the same format as the Fixed format.  Data
                        values that are too long for the column are
                        displayed in Scientific format.

        Dollars         with a leading dollar sign ($), with comma
                        delimiters, and negative numbers in parentheses.

        Currency        with the format specified as a local currency by
                        the Locale Defaults Dialog.

        Custom Currency with the currency format specified explicitly for
                        this cell by additional fields in the Cell Format
                        Dialog.

        Comma           like Fixed format, but with commas delimiting
                        the thousands, millions, etc.

        Percent         displays a value as a percentage with trailing
                        percent (%) sign.

        MM/DD/YY        as a date in the format 12/25/91

        DD-MMM-YY       as a date in the format 25-Dec-91

        MMM-YY          as a date in the format Dec-91

        DD-MMM          as a date in the format 25-Dec

        YY-MM-DD        as a date in the format 96-12-25

        DD.MM.YY        as a date in the format 25.12.96

        HH:MM           as a time in the format hours:minutes,
                        in a 24-hour clock starting at midnight.

        HH:MM:SS        as a time in the format hours:minutes:seconds,
                        in a 24-hour clock starting at midnight.

        Fraction        as an integer plus a fraction of 1, 2, or 3
                        digits, determined by the Decimal Places setting

        Hex             in hexadecimal format, displayed in base 16
                        with a leading 0x indicator

        Logic           as 0 or 1 for logic levels.  Other values are
                        displayed as ? .

        Hidden          cell contents are (blank) not displayed.

        Text            as text when numeric values are entered. Also,
                        displays formula entries in the cells as text
                        as opposed to placing the resulting value of
                        the formula.

Cell Formats Dialog

To view or change Cell Format:
  1. Select the cell or cells that you want to change.
  2. Use one of the three methods described in Cell Attributes - assigning per cell to access the Cell Format list box.
  3. In the Cell Format list box, select the desired format.
  4. If appropriate, select the number of Decimal Places to be displayed - between 0 and 15. For Fractions, this is the number of fractional digits.

    Note: The number of decimal places displayed does not affect the precision of Xess calculations, except for the @VSUM (visual sum) function.

  5. For Custom Currency, select the various currency options. These options can only be modified with this format.
  6. Click OK or press [Return] to confirm and apply your formatting to the selected cell(s) and dismiss the dialog box.
Note: Use the Cell Defaults Dialog to set default cell characteristics that affect the entire spreadsheet.

Cell Linking Between Sheets in a Workbook

The primary method of linking values between spreadsheets is to use the 3-D workbook support in XESS, with dynamic cell referencing between pages (sheets) within the workbook. In this paradigm, each page of the workbook corresponds to a different sheet. The workbook is saved and loaded as a unit.

The Xess spreadsheet display includes tabs for direct access to any sheet within the current workbook. You can insert/delete pages via menu operations. You can also select and name ranges of cells which drill through multiple pages. Range references in dialog boxes have been appropriately updated to accommodate the multi-page environment.

Sheet Names in Formulas

Sheet names may be used to indicate which sheet contains the cell or range of cells needed. By default, sheet names are of the form:
      Sheet1, Sheet2,...Sheetn

The alternate form of sheet names is the same as column names:

      A,B,C...FAM

The upper left cell in the first sheet is:

      Sheet1.A1   or  A.A1
If an explicit sheet name is not specified, the cell reference is assumed to be on the current sheet.

One or both of the cells which define the boundaries for a range may be qualified with a sheet name. Thus:

      Sheet3.A1..Sheet9.A1 or C.A1..I.A1
defines a range of 7 cells, drilling through the sheets.
      Sheet3.A1..A5 or C.A1..A5
defines a 5 cell range on Sheet3, which may not be the current sheet. By varying the sheet name, the column, and the row you can reference 3-dimensional ranges. For example:
      Sheet1.A1..Sheet10.E10 or A.A1..J.E10
defines a cubic solid containing 500 cells (10 sheets * 5 columns * 10 rows).

Sheets in Named Ranges

Sheet names can be used to qualify named ranges.

Restrictions on Multi-Sheet Ranges

Many operations can deal with 3-dimensional data ranges (e.g. @SUM). Others can not handle such ranges (e.g. the matrix functions and user functions with the API).

Cell Linking Between Sheets using @XVALUE, @XHLOOKUP, and @XVLOOKUP

It is possible to make links between spreadsheets. By using the @XVALUE function, you can make one cell reference a cell in another sheet. If cell B1 in the current spreadsheet contains @XVALUE("othersheet.xs4", A1), then the value of B1 will actually be the value of A1 in the file "othersheet.xs4".

You may use the indirect cell reference technique (#) in cases where the @XVALUE function is stored in the same relative cell location as the second argument in the function. For example, if the @XVALUE function is stored in cell A1 and you wish to return the value from cell A1 in a different sheet, then use the construct, @XVALUE("othersheet.xs4",#).

@XHLOOKUP and @XVLOOKUP function the same as @HLOOKUP and @VLOOKUP respectively with the additional feature that the lookup tables can reside in a different sheet.


Cell Note Dialog

Cell notes allow you to attach textual information with a cell which is displayed when the mouse cursor points within the cell. The text of the cell note is displayed in a pop-up area. Moving the mouse will remove this display. Cells containing notes have a small dot in the upper right corner, the same color as the cell cursor.

To enter a note in a cell or to modify an existing note:

  1. Place the cell cursor in the desired cell.
  2. Choose Cell Note... from the Format menu.
  3. Enter or edit the text of the note in the dialog box.
  4. Click OK.

To delete a note from a cell:

  1. Place the cell cursor in the desired cell.
  2. Choose Delete Cell Note from the Edit menu.
Cell notes are saved in the spreadsheet file. Cell notes are supported by the XLS filter.

Cell References

Much of the power of Xess lies in its ability to calculate relationships among different cells in the spreadsheet. Xess provides several ways within a formula to reference other cells. You can:

Absolute and Relative Cell References

Xess differentiates between relative and absolute references. Relative Cell/Range References are interpreted by Xess relative to the current position of the cell containing the formula, such as "the cell two rows down and four columns to the right." Cell references are relative by default. When you copy the cell to another location, Xess changes the cell address so that it still references the cell two rows down and four columns right.

Absolute Cell/Range References are interpreted by Xess as fixed, no matter where you move or copy the cell. To specify an absolute cell address, insert a dollar sign ($) before the address coordinate to be fixed, or before both coordinates if the row and column coordinates are both fixed.

To specify an absolute cell address, insert a dollar sign ($) before the address coordinate to remain fixed. For example:

Ranges can be made absolute just like an individual cell. Insert a dollar sign ($) in front of the coordinate to remain fixed. For example $A1..$C20 makes the column coordinates A and C absolute, while the row coordinates remain relative.

Use [F4] when entering or editing a formula to toggle the absolute/relative settings for a cell reference (e.g. A1, $A$1, $A1, A$1).


Collating Options

Collating options determine how Xess will handle upper/lower case and accented/unaccented characters with Sort, Find, Extract and string comparisons in @IF, @REGEX, @HLOOKUP, and @VLOOKUP functions. (The functions, @EXACT and @FIND, range names, and data entry are not affected by these options.)

Case Sensitivity

Case sensitivity option may be one of:

Accent Sensitivity

Accent sensitivity option may be one of: The default settings for these options are maintained in Sheet Defaults Dialog. You may override the default settings in the Find Dialog, Extract Dialog, and Sort Dialog boxes.

Color Palette

The specific colors and size of the displayed color palette are defined in the Xess resource file. The color resources are *color1...*color63 and the resource, *DialogColors, is used to determine the number of colors displayed in the palette. If a color cannot be allocated, a message will be displayed in the controlling window. The default size of the palette is 15. As you increase the size of the color palette, you may experience a corresponding delay the first time you invoke a dialog which contains the color palette. Subsequent displays of the color palette within the same Xess session will not experience this delay.

Column Width Dialog

  1. Select "Column Width" from the Format menu or mouse button 3 popup menu. Xess displays the Column Width dialog box.
  2. Specify an exact column width by positioning the cursor in the "Selection" box and entering the desired column width.
  3. Click on the OK button or press [Return] to carry out the function. Click on Apply to apply the changes and retain the window. Click Cancel to dismiss the dialog box.

Column Width Options

There are three ways to change the column width: Note: The sheet default column width is overridden by either of the first two methods. Using the mouse:
  1. Move the pointer to the column header of the column to be resized.
  2. Using the left mouse button, click on the right column separator and drag the column bar to the desired width.

Command-Line Options

Xess start up command-line options allow you to set up a number of default options as described below. The syntax for the command-line option is:
        xess4 [options] [file.xs4]

Options:

-rows r                         display "r" rows
-r r

-cols c                         display "c" columns
-c c

-size r c                       display "r" rows and "c" columns
-s r c

-position x y                   initialize upper left corner to "x","y"
-pos x y
-p x y

-connect a|r|l                  accept, refuse, or lock connections at
-con a|r|l                      startup

-xsname name                    name this instance of Xess
-xsn name

-nomenu                         exclude all menu choices except Help
                                from the main menu

-version                        display current version level and exit
-v

-class classname                specify alternate class name/resource file

-help                           display help text and exit
-h

Connections API

Note: The Connections API toolkit for user-written extensions is only available with the fully-licensed Xess spreadsheet system from AIS or an authorized distributor. Xessu users can upgrade to the fully licensed Xess system to be eligible to develop application-specific extensions like those provided with the Xessu system.

A compelling feature of Xess is its understanding that the world does not stand still. In a world of spreadsheets that only capture a snapshot in time, Xess Connection applications are capable of sending and receiving data and commands from other X windows programs, even on other computers, and automatically recalculating every referenced work as it goes. For example you can:

An Xess spreadsheet accommodates incoming and outgoing connections to 63 different remote processes at the same time, offering vast possibilities for using Xess in very sophisticated applications.

The Connection menu enables and disables receiving connection requests from other programs.

Accept Connections

        -enables Xess to accept connection requests from remote clients.

Refuse Connections

        -causes Xess to refuse connection requests from any remote client
         except the Xess Connection Manager (api/example22.c).

Lock Connections

        -causes Xess to refuse all connection requests from remote clients,
         including the Xess Connection Manager (api/example22.c),
         thus ensuring the privacy of your data in a networked environment.

Connection Status

        -shows a list of current connections.
Your Xess distribution media contains many example Xess "connection" source programs written in "C" and "FORTRAN" . On the tape they are located in api/ directory. The file names are example1.c, example2.c, ..., example42.c. The lib/ directory contains the toolkit library "libxess.a" and a "Makefile".

To build these example programs, just "cd" into the appropriate directory and type,

                    % make all
To run one of these Xess client programs, first select Accept Connections from the Connections menu of the menu bar. Next, from an xterm (terminal window), type a client program name(e.g. example8) and press [Return]. In a few moments, the client should connect to the spreadsheet.

PLEASE NOTE: The only prerequisites for creating a client application which utilizes the Xess API library are a C or FORTRAN compiler and the X11 (release 3 or higher) object library.


Constraint Expressions

Constraints are limitations or conditions placed on the variables in your spreadsheet. They are expressed as algebraic statements appended to formulas. You can attach a constraint expression to any formula, by typing a semicolon (;) and the constraint conditions after the formula.

Whether or not constraint expressions are evaluated at recalculation is controlled in Recalc Options dialog under the Options menu.

Constraint expressions establish conditions under which a formula operates or boundaries for valid results of the formula. Constraint expressions may be simple equality/inequality relationships, or they can be arbitrary formulas. Any valid Xess expression which returns a numeric value is also a valid constraint expression. However, unlike the expression that defines a cell value, a constraint expression can reference the cell in which it resides, using the symbol #. For example, the formula


=A1 + A2 ; #>2 && #<=B5 || #==C7
means, "the value of the current cell is the sum of cells A1 and A2, and that value must be either greater than 2 and less than or equal to the value of cell B5, or equal to the value of cell C7."

Constraint expressions are used in several other contexts within Xess, including the Search facility and Extract tool, and the conditional statistical functions. In these contexts, the symbol # always refers to the "current cell," the cell against which the constraint is being evaluated. In many cases, we may wish to include the values of a cell's neighbors in the constraint. For example, we could test whether a cell value was greater than its neighbor to the right by the following constraint expression:

                # > @CELLREF(@COL(#)+1,@ROW(#))
For convenience in referring to neighboring cells, Xess provides a shorthand way of referring to cells relative to the position of the current cell. The notation "#{1}" refers to the cell one column to the right of the current cell, so that "# > #{1}" is equivalent to the more verbose expression above. The notation "#{-2}" refers to the cell two columns to the left of the current cell. The notation "#{0,-1}" refers to the cell one row above the current cell, and #{1,1} refers to the cell one column to the right and one row down from the current cell.

Copy Options Dialog

The copy options determine which aspects of a non-empty cell are transferred to the destination cell with the Copy action. The following choices are available: For efficiency consideration, Xess only copies attributes of cells which are not empty. To change copy options:
  1. Display "Copy Options..." dialog box from the Options menu.
  2. Click on the check box to activate/deactivate one or more options.
  3. Click OK (or press Return) to accept settings and dismiss dialog. Click APPLY to accept settings while retaining dialog. Click CANCEL to dismiss the dialog box.

Copying, Moving, and Clearing Data

Xess provides considerable flexibility in copying and moving data from one part of the spreadsheet to another, and for erasing data in a cell or range of cells. The Edit menu and MB3 popup menu contain the following features for manipulating data already entered into the spreadsheet.

You may also copy data from one sheet to another. In this scenario, you may copy both values and formulas - but not formulas as values. For efficiency consideration, Xess only copies attributes of cells which are not empty in accordance with options set in Copy Options Dialog.

Copy Formulas

        Copies formulas from an active cell or cell range into
        a designated cell or range, overwriting existing data
        in the destination range.  Xess automatically translates
        relative cell references in the copied formulas to reflect
        their new locations.  For example if cell A10 contains the
        formula =@SUM(A1..A9) and is copied to cell B10, then B10
        will contain the formula =@SUM(B1..B9).

Copy Values

        Copies values from an active cell or cell range into a
        designated cell or range, overwriting existing data in
        the destination range.  When copying cells that contain
        formulas, Xess copies the present value of the cell, not
        the formula, and enters the value into the destination cell
        or range as a constant.

Copy Options

        In addition to values and/or formulas copied, any specific
        cell options that may have been defined may also copied. For
        example:  color, font, justification, formats.

        The Copy Options dialog under the Options menu determined which
        of these characteristics are copied.

Move

        Moves a selected cell or range of cells (including all data
        values, formulas, formatting and cell references) to a
        designated location, overwriting existing data in the
        destination range.  Any formulas in the spreadsheet which
        refer to the cells that have been moved are automatically
        updated to refer to the new location.

Clear

        Removes all data in the selected cell or range of cells.
Use the following sequence to perform a copy, move, or clear operation within the same sheet:
  1. Select the cell or range of cells to which you wish to apply the operation. If you do not select a range, then the operation will be applied to the current cell only (the one highlighted by the cell cursor).
  2. Select the operation to be performed from the Edit menu, MB3 popup menu, or use the appropriate keyboard accelerator (for example, "<ctrl>f" for Copy Formulas.
  3. If a Copy or Move operation was selected, you will be prompted on the Status line to select a destination for the operation. The destination for a Copy operation may a single cell, in which case it indicates the upper left corner of the range to which the data is to be copied, or a range over which the data is to be replicated. The destination for a Move operation indicates the upper left corner of the destination.
Alternatively, you may specify the cell range or address using the Select Range dialog box, instead of mouse interaction.

Pasting with the mouse PASTE button

The mouse PASTE button (usually the middle button) can be used to paste whatever data was last selected. Simply move the mouse to the beginning of the desired destination and press the PASTE button.

Note: If you accidently erase the wrong data, or accidently overwrite some cells with a copy or move, Xess allows you to easily recover from your mistake using Undo.


Copy Data Between Sheets in a Workbook

Copy Data Between Sheets or Other Applications

You may also copy data from a sheet to a sheet being referenced by another copy of the Xess spreadsheet program. In this scenario, you may copy both values and formulas - but not formulas as values.

To copy data to another sheet being displayed by a separate copy of the Xess program:

  1. Select the data to be copied using the mouse or the Select Range dialog box in the first sheet.
  2. Position the mouse in the top-left cell of the destination in the second sheet and press the mouse PASTE button (usually the middle button).
Similarly, you may paste data to and from other X Windows applications. This makes it easy to import text from terminal windows (e.g. a directory listing of files) or to export spreadsheet values to a mail message.

Differences Between XessLite and Xess

XessLite is a rich subset of the Xess spreadsheet designed specifically to meet the needs of Linux personal computing. While XessLite worksheet files are upwardly compatible with the full Xess spreadsheet, XessLite features differ from Xess as follows:


Differences Between Xessu and Xess

The Xessu system is a full-function Xess spreadsheet "unit" which can be accessed only within host applications which have embedded the spreadsheet technology. This system is designed specifically for qualifying OEM partners who wish to add spreadsheet-based functionality to the host application.

While the embedded Xessu spreadsheet offers the same underlying functionality as the standard Xess spreadsheet, the following restrictions apply:

End users can license the standard Xess spreadsheet system from AIS or an authorized distributor and substitute it for Xessu, eliminating the restrictions.


Display Options Dialog

XESS97 allows you to tailor the display by selectively eliminating the main menu bar, edit line, row and column buttons, toolbar, and the message line. These elements are all controlled from the Display Options dialog under the Options menu and from API Connections programs. This gives you the flexibility to use XESS as a smart table or grid for your application.

Embedded Tools

Embedded Tools are a powerful feature in Xess. Their power comes from their ability to return data in a matrix, not just the resident cell. This function makes non-scalar operations such as matrix manipulation and "live" recalculation as easy to use as an ordinary spreadsheet function.

Embedded Tools are used to compute things like Fourier transforms, eigenvalues, line fits, and regression analysis.

More information on using Embedded Tools.


Entering Data

Text (Labels)

A text entry is usually used for descriptive information, such as a column heading, row label, or explanatory comment. You can also make text entries of names, addresses or other information your application requires. Text fields may include any character available for the current locale. By default, this is the ISO Latin-1 character set.

Treating Number Entries as Text

Note that some apparently numeric entries, such as phone numbers, may need to be treated as text. For example, if you enter the phone number 555-1212 in a cell, Xess will display the number -657, the difference of 555 and 1,212. However, if you start the character string with one of the special text-indicator characters ('555-1212, for example), Xess treats the phone number as text and not as a formula.

If the *smartTextEntry resource is set, entry into cells formatted with the Text attribute are treated differently. The need to prefix numeric values is removed so that 555-1212 could be entered directly.

Repeating Characters

You can automatically repeat one or more characters to fill the cell by starting the character string with a "double-slash r" (//r). For instance, to fill a cell with hyphens, type:
        //r-
This feature can be useful for drawing lines to demark areas of your spreadsheet when printed. However, if you wish to enter a character string that begins with a slash (/), you must be sure to prepend the entry with one of the special text-indicator characters: ' " ^

Text Labels Wider than One Cell

Text entries can be up to 4095 characters long, so it is possible to make an entry that exceeds the width of the column. If you have not selected the Wrap format option, Xess continues the text in the next empty cell to the right, left, or both, depending upon the justification, and so on until it reaches an occupied cell. Xess stores the entry in full as you entered it, but only displays the number of characters that will fit in available empty cells.

To edit an entry that occupies more than one cell, double click the cell which actually contains the text. Xess will display the full entry on the edit line in the Edit Line. If you select the Wrap format option, Xess will automatically wrap the long text to fit within the bounds of the column width. When the column width changes the contents will automatically re-wrap accordingly.

Numeric Values

Follow these conventions for entering numeric values: To enter a positive number, use the number keys to type the number, with or without a + indicator. If you do not type a plus (+), Xess assumes the number is positive.

To enter a negative number, type a minus sign (-) and the number. Do not use parentheses to indicate negatives. However, certain formats (e.g. Dollars or Comma) cause negative numbers to display with parentheses.

Do not use spaces or commas when entering numbers. If you wish, you can display commas by changing the format.

Be careful not to substitute a lower case L for the numeral 1 or the upper case O for the numeral 0.

You can use scientific notation to enter a number. If the calculated number fits within the cell size and format, Xess displays it in full. Otherwise, it displays the value in scientific notation or displays the special width indicator, depending on the cell format.

Numeric Values Wider than the Cell

As with text entries, you can make numeric entries that exceed the width of the cell. However, unlike text entries, Xess does not display the overflow in adjacent blank cells. Rather, it displays the value in scientific notation or displays a thickened column separator on the left or right (depending on justification) which indicates that the cell is not wide enough to display the value using the selected format. You must either change the cell format or increase the width of the column to return to a normal column separator and view the entire value.

Changing the Numeric Format

You can choose from a variety of different formats for displaying the contents of a cell. The formats do not change the cell values themselves, the way the numbers are stored internally, or the way it is used in calculations. Formatting only changes the way Xess displays numbers in the cell.

Formulas

Formulas are the backbone of the Xess spreadsheet, defining relationships between the values in other cells. For example, formulas can be used to sum a column of numbers, compute an average, determine a minimum or maximum value, or round the results of a formula.

Whereas numeric entries remain the same until you change them, cells defined by formulas are automatically recalculated to reflect changes in referenced cells -- even where there are complex interdependencies among cells.

Once entered in a cell, formulas are hidden behind the scenes, performing their work in the background and displaying only the result of their calculation. To view the formula in a cell, simply select the cell.

Xess displays the formula in the Input/Edit lines in the Edit Line. You can edit the formula or values in cells at any time. Xess also includes a "Text" display format which causes the formula itself, not the cell value, to be displayed on the sheet.

If the Edit Line is not being displayed, select Edit Cell or press [F2] to edit the value within the cell area itself.


Error Handling

When the syntax of a formula is incorrect or a calculation cannot be performed, Xess generates an error message. If you make a mistake, Xess tells you by giving you an error messages in descriptive terms that actually help you solve the problem. A complete list of Xess error messages and their solutions can be found in Appendix A, Error Messages in the User's Manual.

Calculation Errors

When Xess encounters a computational error, a descriptive message is displayed on the Message Line. In addition, the word Error followed by the message appears highlighted in the affected cells. If there are multiple errors flagged in the body of the spreadsheet, the message on the Message Line represents the first calculation error encountered.

Syntax Errors

If you attempt to enter an expression which is syntactically incorrect, Xess displays an informational message on the Message Line, while placing the text edit cursor in the expression where the error was detected.

Xess will not allow a syntactically incorrect expression to be entered.

Operational Errors

When you request Xess to perform an invalid operation, the condition is flagged by the Xess Message dialog box which immediately pops up with a message describing the error. You must click Cancel to dismiss the dialog box.

Explicit Dependency

There may be instances where you need to force a recalculation when certain cell values changes, when there is no implicit dependency in the formula that would trigger an automatic recalculation. This option is indicated by appending a backslash (\) to the end of the dependent formula. For example, the formula

        @SUM(A1..A20)\D50

instructs Xess to recalculate @SUM(A1..A20) whenever the contents of D50 change.

This feature is particularly important when you have a constraint expression containing a constant offset that produces a cell reference outside the cell range referenced in a dependent formula. Under these circumstances, Automatic Recalculation would not necessarily be triggered. For example,

@CCOUNT(C4..C100,# > #{0,-1}) counts all the cells in the range C4..C100 whose value is greater than the contents of the cell im- mediately above.

In order for C4 to be evaluated, it must be compared to C3 - which is not part of the explicit range, C4..C100. Without indicating an explicit dependency, C4 would never be evaluated properly. So, in this case, we would indicate the dependency as follows:


    @CCOUNT(C4..C100,# > #{0,-1})\C3..C99
which tells Xess to recalculate whenever any cell in the range C3..C99 changes.

Exporting Data

Xess provides several options for exporting data from Xess to be used by other applications: Note: You can export data (formulas and values) in WKS/WK1/WK3 and XLS formats for use by spreadsheet programs that recognize these formats. This action is supported from the Save dialog.

Xess3/Xessu/XessLite Cells

You can export a range of cells from the spreadsheet to be later imported into another Xess4, Xessu, or XessLite spreadsheet. This operation has the same effect as cut-and-paste between Xess4/Xessu/XessLite sheets. It uses an intermediate file so it does not require both spreadsheets to be active simultaneously. The default filename extension for Xess4/Xessu/XessLite Export Cell file format is ".xsc".

If you are exporting from an Xess4 or Xessu sheet for subsequent import into XessLite, be sure that your cell utilization does not exceed the bounds of XessLite .

ASCII Text Format

You can export data (string and numeric values, but not formulas) in ASCII text format. These formats are widely used to interchange data among applications. There are three options available for exporting ASCII text: TSV (Tab Separated Values) format uses tabs to separate cell values.

CSV (Comma Separated Values) format uses commas to separate cell values with text strings in double quotes.

Text format does not use a delimiter but uses the column width to determine cell (field) width. This creates a tabular representation of the spreadsheet data. The Text format is also used when pasting with mouse button 2 into a non-Xess window.

LaTeX Tabular Format

Xess spreadsheet data exported in LaTeX tabular format may be included in documents created with the LaTeX document formatting language. The data is written in a LaTeX "tabular" environment, and entities such as fonts and column justifications are preserved. The file created by Xess is not meant to be used standalone.

HyperText Markup Language - HTML

Xess spreadsheet data exported as HTML tables can be accessed directly by web browsers and other similar tools or merged into other HTML documents. Xess creates an HTML document which includes a table element comprised of the cells from the selected range. To ensure that the HTML table elements approximate their order in the spreadsheet, empty cells are treated as empty data elements in the table.

Note also that if a cell element overflows into an adjacent cell, it is necessary to include the root cell into the range selected. You may also include HTML elements directly into spreadsheet cells. These elements will be passed through, as text, to the HTML file and ultimately processed by the browser.


Export Dialog

To export data in any of the formats described in Exporting Data:
  1. Select (highlight) a range of cells to be exported. By default Xess selects the entire spreadsheet for export.
  2. Select Export... from the File menu. Xess presents the Export Data dialog box for you to specify the export filename.
  3. Select the desired format from the File Format list box.
  4. Click the left mouse button inside the entry box titled "Selection" to activate the text insertion cursor. Type the name of the .xsc file you wish to use, or select a Xess spreadsheet cell file by highlighting its name in the Files list box. The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the list box.
    1. To scroll through the list of file names, click the up and down arrows along the right side of the Files list box or drag the scroll bar.
    2. To display files of specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.xsc) inside the Filter entry box. Click on Filter to display filename(s) beginning with these characters.
  5. Click OK or press [Return] to confirm. Click Cancel to cancel the operation.

Extract Dialog

The Extract Tool provides a facility for retrieving rows which match a specified criteria from a selected range. This can be thought of as a database query operation where the selected range represents the database, and each row in the range represents a data record.

To extract a set of records from a selected range:

  1. Select Extract from the Tools menu. Xess displays the Extract dialog box.
  2. To activate the text insertion cursor inside an entry box, position the cursor inside the entry box and click the left mouse button.
  3. In the Source Range entry box, enter the range of records to be considered for extraction.
  4. In the Key column entry box, enter the key column cell address (e.g., C3) on which you want to base the extraction.
  5. In the Destination Range window, enter the beginning cell address where the extracted records will be placed.
  6. In the Filter window area, enter the desired constraint expression.
  7. Click on Numeric Search if the filter is a numeric formula.
  8. If you do not want Xess to distinguish between upper and lower case, ensure that the 'Ignore case' toggle button is ON.
  9. If you do not want Xess to distinguish between accented and unaccented characters, ensure that the 'Ignore accents' toggle button is ON.
  10. Click OK or Apply to begin extraction.

File Display Dialog

All operations which require a file specification use a standard file display dialog box which includes the following common sections:

File Filter

The File Filter controls which files are presented in the dialog box Files list. For most operations, Xess automatically displays all files with the .xs4 extension, the typical extension for Xess files. Xess changes the default file filter to match the format selected in the File Format list box.

For example, if you ask Xess to open a WKS-format file, the file filter appears as *.wks and the Files list box includes all files with names ending in *.wks.

This is especially useful when you have many files on disk and the list is cumbersome to search. For example, you can change the file filter to display:

To change the File Filter:
  1. While the dialog box is displayed, click on the text of the File Filter. Xess presents a text insertion cursor in the File Filter area.
  2. Using the keyboard, type the desired file filter. You can use the asterisk (*) as a wildcard. For instance, the file filter *.xs tells Xess to display files with the .xs extension, no matter what characters precede the extension. The file filter test*.xs tells Xess to display all files whose names begin with test and end with the .xs extension.
  3. Press [Return] or click on the Filter button. Xess displays spreadsheet names that meet the criteria specified in the new file filter.

Files list box

The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the box.
  1. To scroll through the list of file names, click the up and down arrows along the right side of the Files list box or drag the scroll bar.
  2. To display files in a specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.xs4) inside the Filter window. Click on Filter to display filename(s) beginning with these characters.
  3. To view the full pathname of the current directory inside the Directories list box, first position the cursor on the horizontal scroll bar located below the Directories list box. Second, while holding down the left mouse button drag the mouse to the left. Alternatively, click on the small arrow located to the left of the scroll bar until the desired view is obtained.
Note: If you do not find the spreadsheet name you are looking for, check the File Filter in the dialog to make sure you are searching in the correct disk or disk directory.

Directories list box

The Directories list box contains a listing of all directories under the current login directory. The top of the list box contains the name (highlighted) of the current login directory with the extension "/." followed by the current directory name with the extension "/..". Existing Xess files under the current login directory are listed inside the Files list box as explained above.

To change directories

To view files of a different directory, position the cursor on the desired directory name inside the Directories list box and double-click the left mouse button or press [Return]. Alternatively, click once on the desired directory name and click the Filter button.

To move "up" directory levels, position the cursor on the current directory name with the extension "/.." and double-click the left mouse button. The files under the new directory are listed inside the Files list box.

To scroll through the list of directory names, click the up and down arrows along the right side of the Directories list box or drag the scroll bar.

To view the full pathname of the current directory inside the Directories list box, first position the cursor on the horizontal scroll bar located below the Directories list box. Second, while holding down the left mouse button drag the mouse to the left. Alternatively, click on the small arrow located to the left of the scroll bar until the desired view is obtained.

Selection

Position the mouse cursor inside the entry box labeled "Selection" and click the left mouse button. Xess displays a text insertion cursor in front of the current directory pathname. Type the name of the spreadsheet at the current cursor position and click OK or press [Return] to load the file.

Alternatively, first position the cursor on the desired filename inside the Files list box and click the left mouse button to select(highlight)the name. Next, click OK or press [Return] to load the file.

To quickly select and load a file into the spreadsheet, position the cursor on the desired filename inside the Files list box and double-click the left mouse button.


Find Dialog

The Find Dialog lets you quickly locate a specific character string or numeric value. The power of this feature lies in its ability to accept constraint expressions. Ordinary spreadsheet Search or Find operations just locate a designated string, but Xess can find numeric values that meet certain logical or calculated conditions.

For example, you can search for cells whose values are greater than 100 and less than 150, or for cells whose values are less than the average of the three preceding cells. This facility is extremely useful for spotting patterns in scientific data.

When searching by text pattern, a Unix-style regular expression is entered in the "Target" box. For example, a target pattern of "[cbh]at" will match any cell containing one or more of the words "cat," "bat," or "hat." A target pattern of "^C" will match any cell whose formatted text begins with an upper-case C.

When searching by numerical constraint, a valid Xess constraint expression must be entered in the "Target" box and the "Numeric Comparison" must be selected. As an example, to look for values in range named "data" which are more than three standard deviations from the mean, the constraint expression "@ABS(#) > 3*@STDS(data)" could be used as the target.

To Find the first occurrence of an entry in a range:

  1. Display the Search menu from the menu bar.
  2. Select Find... from the list of options.
  3. Specify the range of cells in which Xess should search, by entering two corner coordinates (A1..Z55). The default range is the entire spreadsheet. If a range was selected before you initiated the Search operation, the selected range address is automatically entered inside the Range entry box.
  4. In the "Target" box, enter either a Unix-style regular expression or an Xess constraint expression depending on whether you wish to perform a text pattern search or a numeric search.
  5. As a default Xess searches column by column. Select Search by Row to start searching row by row.
  6. Select Numeric Comparison if you are searching for numeric values. The default search is for alphanumeric ASCII characters (Text Comparison).
  7. If you do not want Xess to distinguish between upper and lower case, ensure that the 'Ignore case' toggle button is ON.
  8. If you do not want Xess to distinguish between accented and unaccented characters, ensure that the 'Ignore accents' toggle button is ON.
  9. To start the search, click the OK or Apply button.
To find the next or previous target value or string, press F7 (Find Next) and F8 (Find Previous), or:
  1. Select 'Search' from menu bar.
  2. Select 'Find Next' or 'Find Previous' accordingly.

Fonts

Xess allows you to select from a variety of font families, style, and sizes. However, the font must also be available on your workstation in order to assign it. The standard set of fonts supported are: In addition, you may add up to seven (7) additional fonts of choice. These font definitions must be added to the Xess resource file. Please refer to Appendix B of the Xess User's Guide for a list of font resources which must be defined.

The following styles are supported for each font family:

The following presentation attributes are supported: The following standard point sizes are supported for each font family: Two additional font sizes can be defined by resources.

Formulas

Formula Syntax

The general form of an Xess formula is:
=(expression) ; (constraint expression) //
where expression defines the calculations needed to generate the cell's value, and constraint expression places limits on acceptable values or the circumstances under which the calculation should take place. Text followed by the string "//" is a comment.

Xess formulas look just like algebraic formulas; they contain values and operators that define the relationships between values, known in this context as operands because they are the entities that operators act on. Follow these guidelines for entering formulas:

Formula Values

Formulas can contain any or all of the following types of values:

Formula Operators

Xess supports all the arithmetic, boolean and logical operators available in the C programming language. It does not support the C address operators or the operators that have side effects, such as ++. Xess does, however, provide an exponentiation operator (**) that is not available in the C language.

Xess Formulas can contain the following operators to define relationship between values.


        Operator     Precedence Definition

        %                 14      percent
        **                13      Exponentiation
        +                 12      Unary  plus
        -                 12      Unary  minus
        ~                 12      Bit-wise complement (integer)
        !                 12      Logical not
        *                 11      Multiplication
        /                 11      Division
        %                 11      Modulus (integer)
        +                 10      Addition
        -                 10      Subtraction
        <<                9       Shift left (integer)
        >>                9       Shift right (integer)
        <                 8       Less Than
        >                 8       Greater Than
        <=                8       Less Than or Equal
        >=                8       Greater Than or Equal
        ==                7       Equal
        !=                7       Not Equal
        &                 6       Bit-wise And (integer) or String Concatenation
        ^                 5       Bit-wise Exclusive Or (integer)
        |                 4       Bit-wise Or (integer)
        &&                3       Logical And
        ||                2       Logical Or
        ?:                1       Conditional
In formulas with more than one operators, Xess calculates operators in the order presented above. That is, AND/OR/NOT relationships are considered before equal/unequal relationships, and subtraction/addition is considered before multiplication/division.

To change the precedence of operators, enclose higher priority operations in parentheses.

Here are some special notes about Xess operators:


Functions Overview

Xess functions are predefined formulas supplied with the program. They offer a shortcut approach to accomplishing the work of long, complex formulas. Mathematical and statistical functions are often used to sum a column of numbers, compute an average, determine a minimum or maximum value, or round the results of a formula.

Other functions are used for more specialized purposes such as computing the future value of an investment or the product of multiplying one cell range by another range. Some functions perform calculations that arithmetic operators cannot handle such as text-string manipulations. Xess functions fall into the following categories:

Mathematical Functions perform calculations with numeric values as arguments, returning numeric values. Also see Embedded Tools.

Statistical Functions perform aggregation and counting operations on a group of values expressed as a list of arguments, returning numeric values.

Conditional Statistical Functions operate much like statistical functions, except that the last argument is a constraint expression that Xess evaluates for each cell in the argument list. Only cells that meet constraint criteria are included in the calculation. Conditional Statistical return a numeric value.

String Functions manipulate and evaluate character strings. For example, string functions can return the length of a string, find the first occurrence of a string in a range, change a string from upper to lower case and vice versa, or replace one string with another.

Logical Functions return one value if an argument meets certain criteria, another value if it does not. Logical functions are used as an adjunct to conditional statements, where the outcome is based on the validity of a statement.

Digital Logical Functions return the values 0, 1 or -1 (unknown) based on the value of its arguments. Digital logic functions evaluate the integer portion of a value. Any value not equal to 0 or 1 is considered unknown.

Financial Functions perform common financial calculations, such as calculating the future value of an annuity at a given interest rate, straight-line depreciation, and depreciation. Xess also includes is a set of financial trading functions which compute things like annuities, bonds, coupons, and Treasury Bills.

Date and Time Functions return values corresponding to the specified date, month, year, hour, minute or second. They can also return the current system time and date.

Miscellaneous Functions perform a variety of calculations, such as returning a reference to specific Cells or ranges or returning the Nth argument from a list of arguments.

Embedded Tools are a powerful feature in Xess. Their power comes from their ability to return data in a matrix, not just the resident cell. This function makes non-scalar operations such as matrix manipulation and "live" recalculation as easy to use as an ordinary spreadsheet function.


Functions by Category

Mathematical Functions

Perform calculations with numeric values as arguments, returning numeric values. For matrix functions, curve fitting, Fourier Transforms, etc. see Embedded Tools.

Function        Returns

@ABS(X)         Returns the absolute value of X
                X - a numeric value

@ACOS(X)        Returns the arc cosine of X
                X - a numeric value between -1 and 1

@ACOSH(X)       Returns the hyperbolic arc cosine of X
                X - a numeric value greater than or equal to 1

@ASIN(X)        Returns the arc sine of X
                X - a numeric value between -1 and 1

@ASINH(X)       Returns the hyperbolic arc sine of X
                X - a numeric value

@ATAN(X)        Returns the 2-quadrant arc tangent of X
                X - a numeric value

@ATANH(X)       Returns the hyperbolic arc tangent of X
                X - a numeric value greater than -1 and less
                than 1.

@ATAN2(X,Y)     Returns the 4-quadrant arc tangent of Y/X
                X, Y - numeric values, one of them must be non-zero

@CEIL(X)        Returns the smallest integer greater than or equal to X
                X - a numeric value

@COS(X)         Returns the cosine of X
                X - a numeric value

@COSH(X)        Returns the hyperbolic cosine of X
                X - a numeric value

@DEGREES(X)     Returns 180/pi times X, converting radians to degrees.
                X - a numeric value

@DET(M)         Returns the determinant of the matrix range M, which
                must be a square matrix.
                M - a range, which must contain an equal number of
                rows and columns.

@DOT(R1,R2)     Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal
                number of rows and columns, or must be a dimension
                1 x n (row vector) or n x 1 (column vector).

@EXP(X)         Returns e raised to the X power
                X - a numeric value representing exponentiation

@FACT(X)        Returns X * (X-1) * ... * 1 (X factorial, or X!)
                X - a numeric value

@FLOOR(X)       Returns the largest integer less than or equal to X
                X - a numeric value

@FRAC(X)        Returns the fractional portion of X
                X - a numeric value

@GAMMA(X)       Returns the value of the gamma function evaluated at X
                X - a numeric value which must be non-negative

@GRAND          Returns a 12th-degree binomial approximation to a Gaussian
                random number with zero mean and unit variance

@INT(X)         Returns the integer portion of X
                X - a numeric value

@LN(X)          Returns the log base e of X
                X - a numeric value greater than 0

@LNGAMMA(X)     Returns the log base e of the gamma function evaluated at X
                X - a numeric value greater than 0

@LOG(X)         Returns the log of X
                X - a numeric value greater than 0

@LOG10(X)       Returns the log base 10 of X
                X - a numeric value greater than 0

@LOG2(X)        Returns the log base 2 of X
                X - a numeric value greater than 0

@MOD(X,Y)       Returns the remainder of X/Y, with the same sign as X.
                This is NOT the modulus, see @MODULUS below for that.
                X, Y - numeric values

@MODULUS(X,Y)   Returns the modulus of X/Y.
                X, Y - numeric values

@PI             Returns a numeric approximation of PI.

@POLY(X,...)    Returns the value of the Nth degree polynomial
                in X, where N is the number of data in the argument
                list.  The argument list may contain numbers and
                cell references, including ranges.  Any non-numeric
                argument causes an error.
                @POLY(2,3,4,5) = (3*(2**2)+4*2+5) = 25

@PRODUCT(...)   Multiplies all the numeric elements of the argument
                list together, ignoring empty and non-numeric values,
                and returns the product.  Each argument can be a
                number, a cell or a range.

@RADIANS(D)     Returns PI/180 * D, converting degrees to radians.
                D is a numeric value.

@RAND           Returns a uniformly distributed random number on
                the interval [0,1].  The number will change every
                time the spreadsheet is recalculated.

@ROUND(X,N)     Returns the number X rounded to the number of decimal
                places specified by the integer N, for N between 15
                and -15, inclusive.
                @ROUND(@PI,2) = 3.14
                @ROUND(1234.5678,-2) = 1200

@SIGMOID(X)     Returns the value of the sigmoid function 1/(1 + exp(-X))
                X - a numeric value

@SIN(X)         Returns the sine of X
                X - a numeric value

@SINH(X)        Returns the hyperbolic sine of X
                X - a numeric value

@SQRT(X)        Returns the positive square root of X
                X - a positive numeric value

@SUMPRODUCT(R1,R2)
                Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal number of
                rows and columns, or must be a dimension 1 x n (row vector) or
                n x 1 (column vector).

@TAN(X)         Returns the tangent of X
                X - a numeric value

@TANH(X)        Returns the hyperbolic tangent of X
                X - a numeric value

@TRANSPOSE(M)   Generates the transpose of matrix M.

@VECLEN(...)    Returns the square root of the sum of squares of its arguments
                argumentlist - any combination of numbers, cells or ranges

Statistical Functions

Perform aggregation and counting operations on a group of values expressed as a list of arguments, returning numeric values.

@AVG(...)       Returns the average (mean) of its arguments
                argumentlist - any combination of numbers, cells or ranges

@CORR(R1,R2)    Returns Pearson's product-moment correlation coefficient for
                the paired data in ranges R1 and R2
                R1, R2 must have the same dimensions

@COUNT(...)     A count of its non-blank arguments
                argumentlist - any combination of numbers, cells or ranges

@F(M,N,F)       Returns the integral of Snedecor's F-distribution with M and N
                degrees of freedom from minus infinity to F
                M,N,F - numeric values

@ERF(L[,U])     Returns the error function integrated between L (lower
                limit) and U (upper limit).  If U is omitted, @ERF
                integrates between 0 and L.
                L, R - a non-negative numeric value

@ERFC(L)        Returns the comlementary error function integrated
                between L and infinity.  @ERFC(L)=1-@ERF(L).
                L - a non-negative numeric value

@FORECAST(X,R1,R2)
                Returns a predicted Y value for X based on a linear
                regression of R1 and R2 where they represent the
                known x values and y values respectively.
                X - a numeric value
                R1, R2 - Ranges of numeric values.  R1 and R2 must be
                         1 dimentional ranges with same sizes.
                @FORECAST(20, A1..A5, B1..B5)=13.60349
                where A1..A5={3,10,18,20} and B1..B5={8,10,13,11}

@FREQUENCY(R, B)
                Returns a frequency distribution for a set of values R
                with a set of intervals B.
                R - a range of values on which frequencies will be counted
                B - a range of intervals used to group values in R
                @FREQUENCY(A1..A8, B1..B2)={3,2,2}
                where A1..A8 = {70,79,80,61,83,93,88,97} and
                      B1..B2 ={80,90}

@FTEST(R1,R2)   Returns the significance level (alpha) of the two-sided
                F-test on the variances of the data specified by
                ranges R1 and R2

@GMEAN(...)     Returns the geometric mean of its arguments
                argumentlist - any combination of numbers, cells,
                or ranges.

@HMEAN(...)     Returns the harmonic mean of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@LARGE(R,N)     Returns the Nth largest datum in range R.
                R - Range of data
                N - Integer specifying which datum to choose.
                @LARGE(A1..A10,3) = 45
                where A1..A10={38,3,9,45,7,90,17,2,75,12}

@MAX(...)       Returns the maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MEDIAN(...)    Returns the median (middle value) of the range R1.
                @MEDIAN(A1..A6) = 3.5
                where A1..A6 = {1,2,3,4,5,6}

@MIN(...)       Returns the minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MODE(...)      Returns the mode, or most frequently occurring datum,
                of all the arguments.  Empty cells and cells containing
                text are ignored.
                @MODE(2, 5, 12, 5) = 5;

@MSQ(...)       Returns the mean of the squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@PERCENTILE(R,N)
                Returns the datum from the range R which is at the Nth
                percentile in R.  Only numeric data in R are considered.
                The result will be interpolated if N is not a multiple
                of 1/(s-1), where s is the size of R.
                R - A range of data
                N - A numeric value between 0 and 1, inclusive.
                @PERCENTILE(A1..A4, 0.4) = 14.2
                where A1..A4 = {23, 4, 12, 67}

@PERCENTRANK(R,D[,S])
                Returns the percentile rank of the datum D in range R.
                If D does not match one of the values in R, the
                function interpolates to return the correct percentage rank.
                R - Range of numeric data
                D - Datum to find
                S = Number of significant digits
                @PERCENTRANK(A1..A10, 4) = 0.33
                where A1..A10 = {1,2,3,4,5,6,7,8,9,10}.

@PERMUT(S,T)    Returns "S choose T", or the number of T objects that
                can be chosen from the set S, where order is significant.
                S - Number of objects to choose from
                T - Number of objects to be chosen
                @PERMUT(100, 3) = 970200

@PTTEST(R1,R2)  Returns the significance level (alpha) of the two-sided T-test
                for the paired samples contained in ranges R1 and R2
                R1 and R2 must have the same size.

@QUARTILE(R,Q)  Finds the quartile Q of the data in range R.
                Equivalent to @PERCENTILE(R, Q/4)
                R = Range of cells
                Q = Quartile as follows:
                         0      Minimum value
                         1      First quartile (25th percentile)
                         2      Second quartile (50th percentile)
                         3      Third quartile (75th percentile)
                         4      Maximum value

                @QUARTILE(A1..B4, 2) = 7.5
                where A1..B4 = {1,2,4,7,8,9,10,12}

@RANK(E,R,[O])  Returns the rank of a numeric argument E in the
                range R.  The rank of a number is its size relative to
                other values in the list, which is equivalent to it's
                position in the list after the list is sorted.  RANK
                gives duplicate numbers the same rank. The presence of
                duplicate numbers will affect the ranks of subsequent
                numbers.  For examples, if there are two rank of 3,
                the next rank will be 5.
                E - a numeric value whose rank you want to find
                R - a reference to a range of values.  Non-numeric
                    values will be ignored.
                O - a numeric value specifying the way the numbers to
                    be ranked. RANK ranks E as if R is in descending order
                    if O is 0 or omitted. Otherwise, it ranks E as if
                    R is in ascending order.
                @RANK(5, C2..C6) = 2
                @RANK(5, C2..C6, 1) = 3
                @RANK(7, C2..C6, 1) = 5
                where C2..C6 = {2,7,5,1,5}

@RMS(...)       Returns the square root of the mean of squares of its
                arguments, which may be any combination of numbers, cells,
                and ranges.  Blank cells and cells containing strings
                are not counted.

@SMALL(R,N)     Returns the Nth smallest number in range R.
                @SMALL(A1..A10,3) = 7
                where A1..A10={38,3,9,45,7,90,17,2,75,12}

@SSE(...)       Returns the sum squared error of its arguments. This function
                equivalent to @VAR(...)/@COUNT(...)
                argumentlist - any combination of numbers, cells, or ranges

@SSQ(...)       Returns the sum of squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@STD(...)       Returns the population standard deviation (N weighting) of its
                arguments
                argumentlist - any combination of numbers, cells, or ranges

@STDS(...)      Returns the population standard deviation (N-1 weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges

@SUM(...)       Returns the sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@T(N,T)         Returns the integral of Student's T-distribution with
                N degrees of freedom from minus infinity to T.
                N, T - numeric values

@TTEST(R,X)     Returns the significance level (alpha) of the two-sided single
                population T-test for the population samples contained
                in range R
                R - a range
                X - a numeric value

@TTEST2EV(R1,R2)
                Returns the significance level (alpha) of the two-sided dual
                population T-test for ranges R1 and R2, where their
                variances are equal

@TTEST2UV(R1,R2)
                Returns the significance level (alpha) of the two-sided single
                population T-test for ranges R1 and R2, where their
                variances are not equal

@VAR(...)       Returns the population variance (N weighting) of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@VARS(...)      Returns the population variance (N-1 weighting) of its
                arguments argumentlist - any combination of numbers,
                cells, or ranges

@VSUM(...)      Returns the "visual sum" of its arguments, using precision and
                rounding of formatted cell values
                argumentlist - any combination of numbers, cells, or ranges

Conditional Statistical Functions

Operate much like statistical functions, except that the last argument is a constraint expression that Xess evaluates for each cell in the argument list. Only cells that meet constraint criteria are included in the calculation. Conditional Statistical return a numeric value.


@CAVG(...,C)    Returns the conditional average (mean) of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CCOUNT(...,C)  Returns a conditional count of its non-blank arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CMAX(...,C)    Returns the conditional maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CMIN(...,C)    Returns the conditional minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSTD(...,C)    Returns the conditional standard deviation (N weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSTDS(...,C)   Returns the conditional sample deviation (N-1 weighting)
                of its arguments.
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSUM(...,C)    Returns the conditional sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CVAR(...,C)    Returns the conditional population variance (N weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CVARS(...,C)   Returns the conditional sample variance (N-1 weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

String Functions

Manipulate and evaluate character strings. For example, string functions can return the length of a string, find the first occurrence of a string in a range, change a string from upper to lower case and vice versa, or replace one string with another.


@CHAR(N)        Returns the character represented by N in the ASCII
                character set.
                N - an integer value between 1 and 255.

@CLEAN(S)       Returns a "printable" representation of string S by
                stripping out unprintable characters.

@CODE(S)        Returns the ASCII code for the first character in string S.
                S - a string value

@EXACT(S1,S2)   Returns 1 if S1 exactly matches string S2; otherwise, 0
                S1, S2 - string values

@FIND(S1,S2,N)  Returns the index of the first occurrence of S1 in S2
                S1, S2 - String values
                N - a numeric value

@FORMAT(F,N,X)  Returns the string formed by formatting the value X using
                the Xess format code F and precision N
                F - Xess format code
                N - the precision level, from 0 to 15
                X - a numeric value

@HEXTONUM(S)    Returns the numeric value for the hexadecimal interpretation
                of S.
                S - a string value

@LEFT(S,N)      Returns the string composed of the leftmost N characters of S
                If N is greater than or equal to the length of S, then the
                entire string S is returned
                S - a string value
                N - a numeric value

@LENGTH(S)      Returns the number of characters in S
                S - a string value

@LOWER(S)       The string S is converted to lower case
                S - a string value

@MID(S,N1,N2)   Returns the string of length N2 that starts at position N1 in S.
                S - a string value

@NUMTOHEX(X)    Returns the hexadecimal representation of the integer
                portion of X, for -2147483648 <= X <= 2147483647.
                X - a numeric value

@PROPER(S)      Returns a copy of string S with the first letter of
                every word capitalized.

@REGEX(R,S)     Returns True(1) if the strings R and S match, and
                and False (0) otherwise. This function is a regular
                expression pattern matcher and is similar to @EXACT(S1,S2)
                function, except @REGEX allows "wildcard" comparisons.
                R - A string representing a regular expression
                S - A string
                @REGEX("t.*e", "table") = True
                @REGEX("F[0-9]", "F3") = True

@REPEAT(S,N)    Returns a string containing N copies of string S.

@REPLACE(S1,N1,N2,S2)
                Returns the string formed by replacing the N2
                characters starting at position N1 in string
                S1 with string S2.
                @REPLACE("Expense Report",8,3,"Log") = "Expense Logort"
                @REPLACE("Expense Report",8,6,"Log") = "Expense Log"
                @REPLACE("ABC",8,3,"XYZ") = "XYZABC"

@RIGHT(S,N)     Returns the string composed of the rightmost N
                characters of S.  If N is greater than or
                equal to the length of S, then the entire string
                S is returned.

@STRCAT(...)    Returns the concatenation of all its arguments.
                argumentlist - any combination of numbers, cells, or ranges

@STRING(X,N)    Returns the string representing the numeric value of X,
                to N decimal places
                X - a numeric value
                N - a numeric value between 0 and 15

@STRLEN(...)    Returns the total length of all strings in its arguments
                argumentlist - any combination of numbers, cells, or ranges

@TRIM(S)        Returns the string formed by removing leading, trailing,
                and consecutive embedded spaces from string S.

@UPPER(S)       Returns the string S converted to upper case.
                S - a string value

@VALUE(S)       Returns the numeric value represented by the string S
                or 0 if S does not represent a number.
                S - a string value

Logical Functions

Return one value if an argument meets certain criteria, another value if it does not. Logical functions are used as an adjunct to conditional statements, where the outcome is based on the validity of a statement.


@FALSE          Returns the logical value 0

@FILEEXISTS(S)  Returns 1 if file S can be opened to read; otherwise 0
                S - a string value

@IF(X,T,F)      Returns the value of T if X evaluates to non-zero,
                or F if X evaluates to zero
                X -  numeric value
                T,F - numeric or string values, cell or range references

@ISERROR(X)     Returns 1 if X "contains" an error, otherwise 0.
                X is an expression, which may include references to
                other cells.  X "contains" an error if the expression
                causes an error, or if it refers to any cells which
                have errors.
                @ISERROR(3/0) = 1
                @ISERROR(A1) = 1 where A1 contains an error value
                @ISERROR(@ISERROR(3/0)) = 0

@ISNUMBER(X)    Returns 1 if X is a numeric value; otherwise 0
                X - a numeric or a string value

@ISSTRING(X)    Returns 1 if X is a string value; otherwise 0
                X - a numeric or a string value

@TRUE           Returns the logical value 1 (true).

Digital Logic Functions

Return the values 0, 1 or -1 (unknown) based on the value of its arguments. Digital logic functions evaluate the integer portion of a value. Any value not equal to 0 or 1 is considered unknown.


@AND(...)       Returns 1 if all arguments are 1; 0 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

@NAND(...)      0 if all arguments are 1; 1 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

@NOR(...)       0 if any arguments are 1; 1 if all arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

NOT(X)          Returns 1 if X=0; 0 if X=1; otherwise -1
                argumentlist - any combination of numbers, cells or ranges
                X - a numeric value

@OR(...)        Logical OR function.  Returns 1 if any argument in
                the list equals 1, 0 if not, and -1 if there is any
                argument in the list not equal to 0 or 1.

@XOR(...)       Returns -1 if any arguments are UNKNOWN;
                1 if the total number of arguments with the value 1 is odd;
                0 if the total number of arguments with the value 1 is even.
                argumentlist - any combination of numbers, cells or ranges

Financial Functions

Perform common financial calculations, such as calculating the future value of an annuity at a given interest rate, straight-line depreciation, depreciation, or the payment term for a given investment. Xess also includes is a set of financial trading functions which compute things like annuities, bonds, coupons, and Treasury Bills.

The set of functions which are used in financial trading require specifying a Day Count Basis. A Day Count Basis indicates the way in which the days in a month and the days in a year are to be counted. Most of the financial functions in securities involve 4 different Day Count Bases: 30/360, actual/actual, actual/360 and actual/360.

30/360 Day Count Basis assumes 30-day months and 360-day years (12 months x 30 days). Xess also follows the "End-of-Month" rule which assumes that a security pays interest on the last day of the month will always make its interest on the last day of the month. Some special rules are followed when calculating the days between two dates on 30/360 Day Count Basis:

Let Start_Date = D1/M1/Y1, End_Date = D2/M2/Y2,

  1. If D1=31, change D1 to 30.
  2. D2=31, D2 will be 31 UNLESS D1=30 or D1=31.
  3. If D1 is the last day of Feburary (D1=28 or 29 in a leap year), change D1 to 30.
  4. If D2 is the last day of Feburary (D2=28 or 29 in a leap year), D2 will stay the same UNLESS D1 is also the last day of Feburary.

@ACCRINT(I,Ft,S,R,P,F[,B])
                Returns the accrued interest for a security that pays
                periodic interest.  Accrued interest is the amount the
                buyer must compensate the seller for the portion of
                the next coupon interest payment the seller has earned
                but will not receive from the issuer.
                I - issue date
                Ft - first coupon date of the security.
                S - settlement date
                R - annual coupon rate
                P - par value of the security
                F - number of coupon payments per year
                B - day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365
                Example:
                A security has the following terms: 4/1/93 settlement date,
                6/1/93 maturity date, 10% semiannual coupon, $1000 par
                value, 30/360 bais
                @accrint(34060,34121,10%,1000,2,0) = 33.333

@ACCRINTM(I,S,R,P[,B])
                Returns the accrued interest for a security that pays
                interest at maturity
                I - the issue date
                S - the settlement date
                R - the annual coupon rate
                P - the par value of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPDAYBS(S,M,F[,B])
                Returns the number of days between the beginning of the
                coupon period to the settlement date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPDAYS(S,M,F[,B])
                Returns the number of days in the coupon period that
                the settlement date is in.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0   30/360
                    1   actual/actual
                    2   actual/360
                    3   actual/365

@COUPDAYSNC(S,M,F[,B])
                Returns the number of days between the settlement date
                and the next coupon date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNCD(S,M,F[,B])
                Returns the next coupon date after the settlement date.
                S - the settlement date.
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNUM(S,M,F[,B])
                Returns the number of coupon payments between the
                settlement date and munurity date.
                S - settlement date
                M - maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPPCD(S,M,F[,B])
                Returns the previous (most recent) coupon date before
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@DDB(C,S,L,N)   Returns the double-declining depreciation allowance
                C - cost
                S - salvage value
                L - allowable value
                N - number of depreciation periods

@DISC(S,M,P,R[,B])
                Returns the discount rate for a security.
                S - the settlement date
                M - the maturity date
                P - the price of the security per $100 face value
                R - the security's redemption value per $100 face
                    value at maturity
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@DOLLARDE(FD,F) Coverts a dollar amount expressed as a fraction form into a
                a decimal form.
                FD - the dollar amount in fractional form.
                F - the integer to used as the denominator of the
                    fraction.
                @DOLLARDE(10.04, 16) = 10.25
                @DOLLARDE(10.2, 8) = 10.25

@DOLLARFR(DD,F) Coverts a dollar amount expressed as a dedimal form into a
                a fraction form.
                FD - the dollar amount in decimal form.
                F - the integer to used as the denominator of the
                    fraction.
                @DOLLARFR(10.25, 16) = 10.04
                @DOLLARFR(10.25, 8) = 10.2

@DURATION(S,M,R,Y,F[,B])
                Returns the Macauley duration of a security assuming
                $100 face value.  The Macauley duration is defined a sthe
                weighted average of the present value of the cash flows.
                S - the settlement date
                M - the maturity date
                R - the security's annual coupon rate
                Y - the security's annual yield
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@EFFECT(NR,NP)  Returns the effectve annual interest rate.
                NR - nominal annual interest rate
                NP - number of compounding periods per year.
                @EFFECT(6%, 4) = 0.061364 or 6.1364%

@FV(P,R,N)      Returns the future value of an annuity
                P - periodic payment
                R - interest rate
                N - number of periods

@FVSCHEDULE(P,S)
                Returns the future value of an initial investment
                after compounding a series of interest rates.
                P - initial investment principal
                S - a range of numeric numbers represents an interest
                @FVSCHEDULE(100, A1..A4) = 141.04
                where A1..A4 = {6%,8%,10%,12%}

@INTRATE(S,M,I,R[,B])
                Returns the interest rate for a fully invested
                security
                S - settlement date
                M - maturity date
                I - amount of investment in the security
                R - redemption at mutirity
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@IPMT(R,P,NP,PV,FV[,T])
                Returns the interest payment for a specific period for
                an investment based on periodic, constant payments and
                a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@IRR(G,F)       Returns the internal rate of return on an investment
                Related functions: @XIRR and @MIRR
                G - a numeric value (an initial "guess" G)
                F - cash flow, represented by a range. It must contain
                at least two cash flow values

@MDURATION(S,M,R,Y,F[,B])
                Returns the modified Macauley duration of a security
                assuming $100 face value.
                S - the settlement date
                M - the maturity date
                R - the security's annual coupon rate
                Y - the security's annual yield
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@MIRR(CF,FR,RR)
                Returns the modified internal rate of return fro a
                series of periodic cash flows.
                CF - a reference to a series of cash flows.  CF must
                     contain at least one positive value (income) and
                     one negative value (payment).
                FR - finance interest rate
                RR - reinvestment interest rate.

@NOMINAL(ER, NP)
                Returns the nominal annual interest rate.
                ER - effective annual interest rate.
                NP - number of compounding periods per year.

@NPV(R,CF)      Returns the present value of a series of future cash flows at
                a given rate.  Related functions: @MNPV and @XNPV.
                R - periodic interest rate
                CF - future cash flow series (must be a range)

@ODDFPRICE(S,M,I,FC,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                with an odd (shor or long) first period.
                S - settlement date
                M - maturity date
                I - issue date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                    $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDFYIELD(S,M,I,FC,R,PR,RD,F[,B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                I - issue date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLPRICE(S,M,LC,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                with an odd (short or long) last period.
                S - settlement date
                M - maturity date
                LC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLYIELD(S,M,LC,R,PR,RD,F[,B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                LC - Last coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PMT(P,R,N)     Returns the periodic payment for a loan, given the
                present value P and interest rate R, and the number
                of periods N.
                P,R,N - Numeric values

@PPMT(R,P,NP,PV,FV,T)
                Returns the payment on the principal for a specific
                period for an investment based on periodic, constant
                payments and a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@PRICE(S,M,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                that pays periodic interest
                S - settlement date
                M - maturity date
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEDISC(S,M,D,RD[,B])
                Returns the price per $100 face value of a discounted
                security.
                S - settlement date
                M - maturity date
                D - discount rate of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEMAT(S,M,I,R,Y[,B])
                Returns the price per $100 face value of a security
                that pays interest at maturity
                S - settlement date
                M - maturity date
                I - issue date
                R - annual coupon rate of the security
                Y - annual yield of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PV(P,R,N)      Returns the present value of an annuity given
                periodic payment P, interest rate R, and N
                periods.

@RATE(F,P,N)    Returns the interest rate required to go from present
                value P to future value F in N compounding periods.

@RECEIVED(S,M,I,D[,B])
                Returns the value at maturity of a fully invested
                security. Dates must be entered as a serial date value.
                S = Settlement date, date of purchase
                M = Maturity date.
                I = Investment amount
                D = Discount rate
                B = Day count basis as follows:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@SLN(C,S,L)     Returns the straight-line depreciation allowance
                given cost C, salvage value S, and allowable life L.

@SYD(C,S,L,N)   Returns the "sum-of-years-digits" depreciation allowance
                given cost C, salvage value S, allowable life L, and
                N depreciation periods.

@TBILLEQ(S,M,D) Returns the bond-equivalent yield (BEY) for a Treasury Bill.
                If the term is one half-year or less, BEY is
                equivalent to a actural/365 simple interest rate.  If
                the term of the security is more than one-half year,
                BEY is equivalent to a semiannually compounded
                Treasury bond yield.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TBILLPRICE(S,M,D)
                Returns the price per $100 face value for a Tresury
                bill.
                S - settlement date
                M - maturity date
                D - discount rate of the Tresury bill

@TBILLYIELD(S,M,D)
                Returns the yield on a treasury bill, given settlement
                date S, maturity date M, and discount rate D.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TERM(P,R,FV)   Returns the number of payment periods for an investment
                P - amount of periodic payments
                R - interest rate
                FV - future value of the investment

@VDB(C.S,L,S,E) Returns the depreciation of an asset between two specific
                period using the fixed-declining balance method.
                C - the initial cost of the asset.
                S - salvage , the value at the end of the depreciation.
                L - life, the total number of periods over which the asset
                    is being depreciated.
                S - Starting period for the calculation
                E - Ending period for the calculation.

@XIRR(G,V,D)    Returns the internal rate of return for a series of
                cash flows with variable intervals
                G - a guessed value of the result
                V - a range, contains a series of cash flows
                D - a range, contains the schedule of cash flows in V