BiffWriter

BiffWriter, a class to create Excel compatible files from within PHP

The purpose of BiffWriter is to create BIFF 2.1 compatible streams straight from PHP with a minimum amount of code writing. Using a widely accepted spread sheet format, compatible with Microsoft Excel allows sharing of information for a wide range of users. Excel compatible formats are accepted by all Windows versions, Microsoft Excel and associated viewers. In addition most of the UNIX derivatives include Excel compatible spread sheet programs. The application range of BiffWriter is almost unlimited: Customized price lists via the web, product catalogs, web logs and last but not least a complete hard copy of database tables.

BiffWriter supports the following features:

  • Writing of text and floating point numbers
  • Formatting of cells with borders, shading and various pictures
  • Four different font sets - user configurable
  • Protecting cells against changes or protecting the whole spreadsheet
  • Setting of individual column width
  • User defined format pictures
  • Conversion from UNIX dates to Excel dates
  • BIFF aka Binary File Format is the common denominator across spreadsheet programs. A BIFF file is a stream of records describing an Excel compatible spreadsheet. Such records contain for instance font information, cell data and password information. The BIFF format expects the individual records in a particular order to recognize the stream as a valid, Excel compatible file. BiffWriter takes care of assembling the various records into the expected order without having the user to remember that for instance formats come before cells, etc. This is accomplished by a unique parser putting the stream into correct order of records. All the user (programmer) needs to remember is that the stream must be closed at the end of the script. All other function can be called as desired.

    BiffWriter consists currently of 2 classes:

    1. BiffWriter alias biff.php -- this is the extended class of BiffBase with bound and error checking and assures that each function has default parameters. This class provides either row/column based notation or traditional A1..IV##### notation. It also sets the PHP error reporting level to the maximum to find for instance uninitialized variables or constants. This is the class to be used.

    2. BiffBase alias biffbase.php -- this is the base class and contains generic functionality. This class is optimized for speed and does no, or very little error checking. This class should be used only if speed really matters at above > 500,000 cells. Again, there is no error checking and there are no default parameters set in this class. This class provides only row, column notation.

    The shortest simple example, writing text into Row 1 and Column A contains only 4 lines of PHP code:

    <?php
    include "biff.php";
    $myxls = new BiffWriter();
    $myxls->xlsWriteText(0,0,"BiffWriter speeds up information exchange");
    $myxls->xlsParse();
    ?>

    BiffWriter currently supports writing of text and floating point numbers. Date/Time formats can be written as text or converted to a numerical value depending on the clients use. Date and time values need to be converted to a numerical value if the client wants to perform math or sorting on these values.

    top

    Acknowledgments and Disclaimer:

    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The use of this library is free for non commercial purposes. This class is copyright of Christian Novak.

    You can reach the author of this library, Christian Novak at cnovak@gmx.net. This class is a further development of a simple library ("_excel.php") developed by the author in 2000 and published at PX: PHP Code Exchange in November 2000.

    The information about the BIFF specification was taken from a document called "Excel.txt" written by Mark O'Brien from Microsoft Corporation, dated February 18, 1988. This is an excellent start to understand the most common and simple spreadsheet format. I developed the first class for writing Excel binary files in 1995 using Delphi. This was further translated into a C library for use on non Windows platforms.

    I would also like to acknowledge the work of Erol Ozcan who further developed my first simple Excel library into a real usable PHP class available at http://psxlsgen.sourceforge.net. I believe it is important too, to mention the continuous support of my patient partner Laura who always understands my desire about code writing and always encourages me to explore new areas in my professional life.

    Your feedback, comments and help is greatly appreciated. Please drop me a note via mail or via the web site dedicated to this project.

    Christian Novak
    Wilhelm-Hertz-Str. 20
    80805 Germany

    phone +49 89 71998127
    e-mail cnovak@gmx.net

    top

    What is next?

    I am considering to implement the following features providing that there is enough interest in the PHP community. Additional functionality will be implemented as time permits and votes are provided.

    Ref Function Notes Req. votes
    1 Horizontal page breaks Set horizontal page breaks for printing complete
    2 Vertical page breaks Set vertical page breaks for printing complete
    3 Default row height Set sheet wide row height complete
    4 Cell notes Apply notes to individual cells complete
    5 Pane Freeze top and left pane 50
    6 Formula parser Parse formulas as per the Excel notation. Note: Excel stores formulas in RPN (reverse polish notation) 200
    7 Work book capability Multiple work sheets per work book with internal and external links 500

    You can vote for for adding additional functionality at http://www.cnovak.com. This greatly helps me in setting further development priorities. Please note that you need to provide a real e-mail address for your vote to be taken into consideration. Please no "nospam@somehere.com", I am verifying all e-mail addresses to focus on the work the community is really interested in.

    top

    Conventions used in this manual

    I have used a number of of different styles and layout in this manual to help to differentiate between different kind of information. Some examples are:

    top

    BiffWriter Functions, Constants and Public variables

    All public functions are prefixed with "xls".

    Public Functions:
    xlsAddFormat add a customized picture format
    xlsAddHPageBreak add a horizontal page break
    xlsAddVPageBreak add a vertical page break
    xlsCellNote add a note to a cell
    xlsDate convert a UNIX date into an Excel compatible integer
    xlsFooter add a print footer to the spreadsheet
    xlsHeader add a print header to the spreadsheet
    xlsParse close the spreadsheet and parse it to the browser
    xlsPrintMargins set print margins
    xlsProtectSheet protect the sheet or cells
    xlsSetBackup set backup flag
    xlsSetColWidth set the column width for a range of columns manually
    xlsSetDefFonts create default fonts
    xlsSetDefRowHeight set the default row height for the entire spread sheet
    xlsSetFont set a customized font
    xlsSetPrintGridLines print gridlines
    xlsSetPrintHeaders print row and column references
    xlsWriteDateTime write an SQL datetime stamp into a cell
    xlsWriteNumber write a number into a cell
    xlsWriteText write a string into a cell
    Public Constants:
    Font index - integer • FONT_0, FONT_1, FONT_2, FONT_3
    Font styles - integer • FONT_NORMAL, FONT_BOLD, FONT_ITALIC, FONT_UNDERLINE, FONT_STRIKEOUT
    Cell attributes - integer • ALIGN_GENERAL, ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT
    • CELL_FILL, CELL_LEFT_BORDER, CELL_RIGHT_BORDER, CELL_TOP_BORDER, CELL_BOTTOM_BORDER, CELL_BOX_BORDER
    • CELL_SHADED
    • CELL_FILL
    Cell status - integer • CELL_LOCKED,
    • CELL_HIDDEN
    Other - integer • XLS_DATE
    Public variables and arrays:
    err_level - integer err_level defines the error/warning levels. By defaults no errors are trapped unless PHP stops the script itself. Set err_level to 1 to stop the script at all Biff2.1 specification errors. The default is 0.
    outfile - string this is the name of the file that the browser will suggest to the user when opening or saving the stream. The default is sample.xls. This can be omitted if the file is saved by specifying the name in xlsParse().

    top

    xlsAddFormat

    xlsAddFormat -- add a format/picture string

    int xlsAddFormat(string picture)

    xlsAddFormat adds a picture string to the internally formatting table and returns a pointer to the newly created entry. By default there are 21 pictures defined in Excel. See the table below showing more details. There is no known limitation on the number of picture strings to be possible added.

    Parameters:
    picture string

    Any Excel valid formatting picture. Taking into account differences in regional settings.

    Excel in the simplest file format comes with 21 formats also called pictures built in. The format index is referenced by an zero based pointer.

    The following tables shows the internal defined picture formats. The sample number used for illustrating purposes is 33333.33. This number evaluates to April 5, 1991 at 7:59:57 AM using a date/time format. Otherwise it is treated as standard IEEE floating point number.

    // example 1, adding an additional format pattern and returning a pointer to this pattern
    $idx_fmt = $myxls->xlsAddFormat('[Blue] 0 "US$"');

    Internal formats:

    Index
    Display
    Excel compatible picture string
    0
    33333.3333
    General

    1

    33333

    0

    2

    33333.33

    0.00

    3

    33,333

    #,##0

    4

    33,333.33

    #,##0.00

    5

    $33,333

    $#,##0_);($#,##0)

    6

    $33,333

    $#,##0_);[Red]($#,##0)

    7

    $33,333.33
    $#,##0.00_);($#,##0.00)

    8

    $33,333.33
    $#,##0.00_);[Red]($#,##0.00)

    9

    3333333%
    0%

    10

    3333333.33%
    0.00%

    11

    3.33E+04
    0.00E+00

    12

    4/5/1991
    m/d/yyyy

    13

    5-Apr-91
    d-mmm-yy

    14

    5-Apr
    d-mmm

    15

    Apr-91
    mmm-yy

    16

    7:59 AM
    h:mm AM/PM

    17

    7:59:57 AM
    h:mm:ss AM/PM

    18

    7:59
    h:mm

    19

    7:59:57
    h:mm:Ss

    20

    4/5/1991 7:59
    m/d/yyyy h:mm

    Care must be taken while defining picture strings for date and time formats. The above table assumes that the users system is set to English regional settings. However, other languages use different codes for naming days, month, years, hours, minutes and seconds. For instance to display 05-Apr-91 on a German system, the picture string #13 would read "t-mmm-jj".

    top

    xlsAddHPageBreak

    xlsAddHPageBreak -- add a horizontal page break for printing

    void xlsAddHPageBreak(int row)

    xlsAddHPageBreak adds a page break after the row specified.

    top

    xlsAddVPageBreak

    xlsAddVPageBreak -- add a vertical page break for printing

    void xlsAddVPageBreak(mixed column)

    xlsAddVPageBreak adds a page break after the column specified. Column is in mixed notation, integer, zero based or string 'A' to 'IV'.

    // example 1, numeric notation:
    xlsAddVPageBreak(10);
    // example 2, A1 notation:
    xlsAddVPageBreak('J');

    top

    xlsCellNote

    xlsCellNote -- Add a note to a cell

    void xlsCellNote(mixed row, int col, string note)

    This function adds a cell note. Notes can be up to 2048 characters in length. Row is in mixed notation, integer 0 based or string 'A' to 'IV'.

    Parameters:
    row mixed Cell rows are zero based. Valid ranges are from 0 to 65535. Row is in mixed notation, integer 0 based or string 'A1' to 'IV16384'.
    col int Cell column zero based. Valid ranges are from 0 to 255. This must be set to zero if the A1 notation is used as a row parameter.
    note string String of characters to assign to a note

    top

    xlsDate

    xlsDate -- Convert a UNIX time stamp into Excels "1900" format 

    int xlsDate(int month,int day, int year)

    The Excel date starts on January 1st, 1900 while UNIX dates start on January 1st, 1970. This function converts a UNIX date into the corresponding Excel date returning an integer based on the 1900 format. This function is useful together with xlsWriteNumber() applying a date/time format picture.

    Parameters:
    month int Month value, valid range is 1-12
    day int Day value, valid range is 1-31
    year int Year value, valid range is not determined

    ExcelDate = xlsDate(4, 26, 1962)
    // returns the Excel date serial number for April 26, 1962.

    top

    xlsFooter, xlsHeader

    xlsFooter -- Specify a print footer
    xlsHeader -- Specify a print header

    void xlsFooter(string footer)
    void xlsHeader(string header)

    Use xlsFooter or xlsHeader to specify the footer or header printed on every page.
    Parameters:
    footer, header string

    Text to be printed on every page. In addition to regular text, the footer/header accepts the following macro expressions:

    • &L -- left align text following this code,
    • &C -- center align text following this code (default),
    • &R -- right align text following this code,
    • &P -- insert current page #,
    • &N -- insert total page #,
    • &D -- insert current date,
    • &T -- insert current time,
    • &F -- insert file name,
    • &# -- specify a font size, i.e. &12 size 12, font set 0

    // Sample 1:
    // print a centered header using font size 12
    xlsHeader('&12BiffWriter Demo (c) C. Novak - cnovak@gmx.net');

    // Sample 2:
    // print a left, center and right aligned section
    // left: Page x of y using font size 12
    // center: Date and time
    // right: Filename and line feed
    xlsFooter('&L&12Page &P of &N &C&D &T &R&F/&A');

    top

    xlsParse

    xlsParse -- Assembles the BIFF data and sends the stream or saves the content.

    string xlsParse(string filename);

    xlsParse assembles all the calls to the previous BIFF functions and writes the stream to the browser or a local file. This command concludes all BIFF actions and exits the class.

    Parameters:
    filename string Fully qualified file name, default is NULL. If omitted, a header specifying an attachment and the output is sent, otherwise the file filename is created locally.

    // Sample 1:
    // stream the contents straight to the browser
    xlsParse();

    // Sample 2:
    // save the file locally and offer a download link
    $link = xlsParse('YourFile.xls');
    print '<A HREF="' .$link. '">'.$link.'</A>';


    top

    xlsPrintMargins

    xlsPrintMargins -- Set left, right, top and bottom print margins

    void xlsPrintMargins(float left[, float right[, float top[, float bottom]]])

    Specify the print margins in INCHES using xlsPrintMargins. The defaults values are 0.5 inches.

    Parameters:
    left, right, top, bottom float Margin in inches. The default margin calling xlsPrintMargins is 0.5 inches

    top

    xlsProtectSheet

    xlsProtectSheet -- set worksheet protection.

    void xlsProtectSheet(string password[, bool protect_cells])

    xlsProtectSheet protects the worksheet against changes.

    There are 2 levels of protection:
    - For the entire worksheet except for cells not flagged "locked". and
    - For cells flagged "locked".

    The default value for both parameters is FALSE.

    Parameters:
    protect_sheet string

    Password to protect changes flagged with CELL_LOCKED or any empty cell. The default is an empty string = no password

    protect_cells bool TRUE = enables protection of individual cells. The default is FALSE.

    // Sample 1:
    // turn on cell protection for all cells where the locked flag is set
    xlsProtectSheet('', TRUE);

    // Sample 2:
    // protect sheet properties AND cells where the locked flag is set
    xlsProtectSheet('MYPASSWORD', TRUE);

    top

    xlsSetBackup

    xlsSetBackup -- turn on backup option

    void xlsSetBackup();

    Call xlsSetBackup to turn on the creation of backup files while changes are applied to the spread sheet. Excel saves the backup file prepending "Backup of " and with the extension "XLK".

    top

    xlsSetColWidth 

    xlsSetColWidth -- Set column width

    void xlsSetColWidth(mixed colstart, mixed colend, int width)

    Sets the width for a range of columns. The column width is internally calculated as 1/256 of a point. Since the required column width to display data is based on the used font, you won't necessarily make cell contents fit into a cell by only taking the length of the data.

    Parameters:
    colstart mixed First column to set the width. This is in mixed notation, either integer, zero based or 'A' to 'IV'.
    colend mixed Last column to set the width. This is in mixed notation, either integer, zero based or 'A' to 'IV'.
    width int Width in characters based on "Courier New" 10px.

    // Sample:
    // set the width of column A, B, C, D & E to 10 characters
    xlsSetColWidth(0, 4, 10);
    // this is the same using A1 notation
    xlsSetColWidth('A', 'E', 10);

    top

    xlsSetDefFonts

    xlsSetDefFonts -- Creates 4 default fonts

    void xlsSetDefFonts();

    This function creates 4 default fonts for the use with cell format. The font index is zero based from 0 to 3. Fonts can be referred to by the constants FONT_0, FONT_1, FONT_2, FONT_3. The default fonts are:

    Font name Font style Index
    Arial Arial 10 normal FONT_0
    Courier Courier New 10 normal FONT_1
    Times Times New Roman 10 normal FONT_2
    System System FONT_3

    top

    xlsSetDefRowHeight

    xlsSetDefRowHeigth -- set the default row height for the entire spreadsheet

    void xlsSetDefRowHeight(int points);

    This function sets the default row height for all rows in the entire spread sheet. The unit of the value passed to this function is points.

    Parameters:
    points int row height in points

    top

    xlsSetFont

    xlsSetFont -- create a new font entry

    void xlsSetFont(string name[, int size[, int format]]);

    The Excel or BIFF 2.1 allows for 4 fonts per spreadsheet. Fonts can be added to the internal font table by calling xlsSetFont specifying the font name, font size and attributes such as bold, underline etc. The first font added becomes FONT_0, the second FONT_1 and so on.

    Parameters:
    name string Font name as specified by the operating system. Exact spelling matters.
    size int Font size in points, the default is 10 points.
    format int

    One or more of the following font attributes in any combination:
    FONT_NORMAL, FONT_BOLD, FONT_ITALIC, FONT_UNDERLINE, FONT_STRIKEOUT.
    The default is FONT_NORMAL:

    // Sample:
    // create font 0 Arial 10, font 1 Arial 10 bold + underlined
    xlsSetFont('Arial');
    xlsSetFont('Arial', 10, FONT_BOLD + FONT_UNDERLINE);

    top

    xlsSetPrintGridLines

    xlsSetPrintGridLines -- turn printing of Gridlines on

    void xlsSetPrintGridLines();

    Call xlsSetPrintGridLines to turn the printing of grid lines on.

    top

    xlsSetPrintHeaders

    xlsSetPrintHeaders -- turn printing of row and column headers on.

    void xlsSetPrintHeaders();

    Call xlsSetPrintHeaders to turn on printing of row and column headers.

    top

    xlsWriteDateTime

    xlsWriteDateTime -- Writes an SQL datetime stamp into a cell

    void xlsWriteDateTime(mixed row, int col, double value [, int width [, int picture [, int font [, int attribute [, int status]]]]])

    Writes an SQL datetime stamp into a floating point value (double) into a cell at a given row and column. Excel expects valid date/times as numeric value. This function converts an SQL datetime stamp into a floating point value

    Parameters:
    row mixed Cell row zero based or absolute cell position in A1 to IV 65536 notation.
    col int Cell column zero based. Valid ranges are from 0 to 255. Must be set to zero if A1 notation is used.
    value string Datetime stamp in the format of 'YYYYMMDD[HH[MM[SS]]]'.
    width int Cell width, for details please see chapter Cell Formatting
    picture int Index to picture format, for details please see chapter Cell Formatting
    font int Index to FONT_0 to FONT_3, for details please see chapter Cell Formatting
    attribute int Cell attributes, for details please see chapter Cell Formatting
    status int Cell protection, for details please see chapter Cell Formatting

    // Sample 1:
    // write SQL datetime of 01-May-2002 11:55:00 into row 1, column B using default settings
    xlsWriteDateTime(0, 1, '20020501115500);
    // same using A1 notation
    xlsWriteDateTime('B1', 0, '20020501115500');
    // Sample 2:
    // write a SQL date of 01-May-2002 into row 1, column B by using default settings
    xlsWriteDateTime(0, 1, '20020501');

    top

    xlsWriteNumber

    xlsWriteNumber -- Writes a number into a cell

    void xlsWriteNumber(mixed row, int col, double value [, int width [, int picture [, int font [, int attribute [, int status]]]]])

    Writes a floating point value (double) into a cell at a given row and column. 

    Parameters:
    row mixed Cell row zero based or absolute cell position in A1 to IV 65536 notation.
    col int Cell column zero based. Valid ranges are from 0 to 255. Must be set to zero if A1 notation is used.
    value double Cell content as double value
    width int Cell width, for details please see chapter Cell Formatting
    picture int Index to picture format, for details please see chapter Cell Formatting
    font int Index to FONT_0 to FONT_3, for details please see chapter Cell Formatting
    attribute int Cell attributes, for details please see chapter Cell Formatting
    status int Cell protection, for details please see chapter Cell Formatting

    // Sample 1:
    // write 12345.6789 into row 1, column B using default settings
    xlsWriteNumber(0, 1, 12345.6789);
    // same using A1 notation
    xlsWriteNumber('B1', 0, 12345.6789);
    // Sample 2:
    // write 12345.6789 into row 1, column by using font 0, picture 12 (short day,
    // short month and long year), align center and flag the cell locked.
    xlsWriteNumber(0, 1, 12345.6789, 0, 12, IDX_FONT0, ALIGN_CENTER, CELL_LOCKED + CELL_HIDDEN);

    top

    xlsWriteText

    xlsWriteText -- Writes text into a cell

    void xlsWriteText(int row, int col, string text [, int width [, int picture [, int font [, int attribute [, int status]]]]])

    This function writes text into a cell positioned at row and column. The length of text can be up to 256 characters per cell.

    Parameters:

    row

    int

    Cell row zero based or absolute cell position in A1 to IV 65536 notation.

    col

    int

    Cell column zero based. Valid ranges are from 0 to 255. Must be set to zero if A1 notation is used.

    text

    string

    Cell contents as string, up to 256 characters.

    width int Cell width, for details please see chapter Cell Formatting
    picture int Index to picture format, for details please see chapter Cell Formatting
    font int Index to FONT_0 to FONT_3, for details please see chapter Cell Formatting
    attribute int Cell attributes, for details please see chapter Cell Formatting
    status int Cell protection, for details please see chapter Cell Formatting

    // Sample 1:
    // write "Hello World" into row 2, column B using default settings
    xlsWriteText(1, 1, "Hello World);
    // Sample 2:
    // write "Hello World" into row 2, column B using auto width, second defined font,
    // general picture, align center and flag the cell locked.
    xlsWriteText(1, 1, "Hello World", 0, 0, FONT_1, ALIGN_CENTER, CELL_LOCKED);

    top

    Cell Formatting

    The formatting of cells is accomplished by specifying the attributes width, picture, font, alignment and status.

    Width:

    The cell width is an optional parameter. The width of a cell is calculated by taking the length of the string ("auto width") or by using an explicit setting. The actual width required to display all characters in a cell varies by font and by the width of each individual character within the cell. On Windows based systems Arial 10 seems to lead the most consistent results. Explicitly setting the width allows for closer control of each column and is the preferred method to create "ready to go" Excel files.

    The sample picture below illustrates the issue with the required cell width versus the calculated cell width based on 4 sample fonts:

    The sample below explains how column width are derived:

    Column A:

    All cell entries are set to 0, "auto width". BiffWriter takes the longest cell within all cells in column A to determine the maximum required width.

    Column C:

    All cell entries are set to -1, "don't care", then a width of 10 characters has been applied using xlsSetColWidth.

    Column E:

    All cell entries are set to -1, "dont' care". Excel uses the default width which is 8.43 characters

    Here is a another example including the source code:

    <?php
    /* The first 3 rows are set to "auto width" since the 3rd argument (col_width) has been omitted.
    ** So the largest in size wins, this is "A2" with a width of 15 characters.
    ** "A4" is set to -1, "don't care" and is not taken into consideration.
    */
    include('biff.php');
    $xls = new BiffWriter();
    $xls->xlsWriteText('A1', 0, str_repeat('X' ,10));
    $xls->xlsWriteText('A2', 0, str_repeat('X', 15));
    $xls->xlsWriteText('A3', 0, str_repeat('X', 5));
    $xls->xlsWriteText('A4', 0, str_repeat('X', 30), -1);
    $link = $xls->xlsParse("width.xls");
    print '<A HREF="' .$link. '">'.$link.'</A>';
    ?>

     

    While parsing the stream, BiffWriter takes the largest width of a cell set via "auto width" or a explicit set cell width and applies this setting to the whole column. The default value is 0, "auto width".

    Picture:

    Cell pictures aka display formats are set with the help of an optional picture parameter. Pictures are referred by an zero based index. The default value is 0, "General" format.

    Font:

    The BIFF 2.1 specification supports only 4 default fonts in a spread sheet. By default, Excel assumes the font set in the configuration page. In most cases this is Arial 10. BiffWriter allows setting of four individual fonts by calling xlsSetFont. As as shortcut, calling xlsSetDefFonts creates four default fonts, namely Arial 10, Courier New 10, Times New Roman 10 and System right away. Fonts are referred to with the public constants FONT_0 to FONT_3 respectively. Attributes such as bold, underlined, italics and or strikeout can be applied to each of the four fonts in any combination. The default font is FONT_0.

    Attributes for Borders and Cells:

    Borders are set by using the optional attribute parameter. Border values can be applied in any possible combination. Border values are combined with the cell alignment attributes. The default values are ALIGN_GENERAL and no border.

    Status:

    The cell status (hidden or protection) is determined by the optional status parameter. The default values are unlocked and non-hidden.

     

    Formatting parameter table:
    Parameter Type Description

    width

    int

    Determines the width of the cell, the width of the whole column.
    Accepted values are:
    • -1 = don't care, use default column width or any other column width,
    • 0 = auto width, determine width by calculating the length of the cell content,
    • 1 - 255 set the column width explicitly

    The default is 0, auto width.

    picture

    int Formatting picture as defined by the first 21 internal formats or formats added by xlsAddFormat. The default is 0, "General"

    font

    int Pointer to font 0 to font 3, referenced as FONT_0....FONT_3 respectively. The default is FONT_0.

    attribute

    int

    Cell alignment -- specifies the alignment of the cell content:
    • ALIGN_GENERAL,
    • ALIGN_LEFT
    • ALIGN_CENTER
    • ALIGN_RIGHT
    Only one value is valid.

    Borders -- specifies cell borders:
    • CELL_RIGHT_BORDER
    • CELL_LEFT_BORDER
    • CELL_TOP_BORDER
    • CELL_BOTTOM_BORDER
    • CELL_BOX_BORDER
    These values can be combined by adding each value.

    Other:
    • CELL_SHADED -- shades the cell with a gray pattern
    • CELL_FILL -- fills the cell up to the current column width by repeating the cell content
    These values can be combined by adding each value.

    The default is ALIGN_GENERAL, no border, no shading and no fill.

    status

    int

    Cell protection -- protects or hides a cell:
    • CELL_LOCKED, flags a cell "locked" against changes. Please note that you need to call xlsProtectSheet() to lock any cells flagged as "locked".
    • CELL_HIDDEN (not supported currently)

    The default is cell unlocked and not hidden.