Read/write xls(x)?

Just starting out? Need help? Post your questions and find answers here.
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

Read/write xls(x)?

Post by doctorized »

Is there a way to read and write Excel files, .xls and/or .xlsx? I have found some older posts but nothing is working. I found reference to PureXls but all links are dead.
User avatar
blueb
Addict
Addict
Posts: 1116
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Re: Read/write xls(x)?

Post by blueb »

I searched for a likely location such as RSBasic's backup webpage https://www.rsbasic.de
to locate Flype's original code, but was not successful.

I looked back through my old files and located the PBI file :)

PureXLS.PBI

Code: Select all

;  
;  File:          PureXLS.pbi
;  Version:       0.1 - October 2006
;  
;  Author:        flype
;  Contact:       mailto:flype44@gmail.com
;  
;  Compiler:      PureBasic 4.0
;  HomePage:      http://www.purebasic.com
;  
;  Description:   API for writing - not reading - Microsoft Office Excel documents
;                 The file format is in XML and only support Microsoft Office XP, 2002, 2003, or better.
;  
;                 XML in Excel and the Spreadsheet Component
;  MSDN:          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexcl2k2/html/odc_xlsmlinss.asp
;  

;{ Hierarchy of XLS/XML tags
;<?xml version="1.0" encoding="UTF-8"?>
;<Workbook>
;  <Styles>
;    <Style>
;      <Alignment/>
;      <Borders>
;        <Border/>
;      </Borders>
;      <Font/>
;      <Interior/>
;      <NumberFormat/>
;      <Protection/>
;    </Style>
;  </Styles>
;  <Worksheet>
;    <Table>
;      <Column/>
;      <Row>
;        <Cell>
;          <Data/>
;        </Cell>
;      </Row>
;    </Table>
;  </Worksheet>
;</Workbook>
;}

EnableExplicit

;  
;- CONSTANTS - PUBLIC
;  

;{ #XLS_Horizontal
#XLS_Horizontal_Automatic             = "Automatic"
#XLS_Horizontal_Left                  = "Left"
#XLS_Horizontal_Center                = "Center"
#XLS_Horizontal_Right                 = "Right"
#XLS_Horizontal_Fill                  = "Fill"
#XLS_Horizontal_Justify               = "Justify"
#XLS_Horizontal_CenterAcrossSelection = "CenterAcrossSelection"
#XLS_Horizontal_Distributed           = "Distributed"
#XLS_Horizontal_JustifyDistributed    = "JustifyDistributed"
;}
;{ #XLS_Vertical
#XLS_Vertical_Automatic          = "Automatic"
#XLS_Vertical_Top                = "Top"
#XLS_Vertical_Bottom             = "Bottom"
#XLS_Vertical_Center             = "Center"
#XLS_Vertical_Justify            = "Justify"
#XLS_Vertical_JustifyDistributed = "JustifyDistributed"
;}
;{ #XLS_ReadingOrder
#XLS_ReadingOrder_RightToLeft = "RightToLeft"
#XLS_ReadingOrder_LeftToRight = "LeftToRight"
#XLS_ReadingOrder_Context = "Context"
;}
;{ #XLS_Position
#XLS_Position_Left          = "Left"
#XLS_Position_Top           = "Top"
#XLS_Position_Right         = "Right"
#XLS_Position_Bottom        = "Bottom"
#XLS_Position_DiagonalLeft  = "DiagonalLeft"
#XLS_Position_DiagonalRight = "DiagonalRight"
;}
;{ #XLS_LineStyle
#XLS_LineStyle_None         = "None"
#XLS_LineStyle_Continuous   = "Continuous"
#XLS_LineStyle_Dash         = "Dash"
#XLS_LineStyle_Dot          = "Dot"
#XLS_LineStyle_DashDot      = "DashDot"
#XLS_LineStyle_DashDotDot   = "DashDotDot"
#XLS_LineStyle_SlantDashDot = "SlantDashDot"
#XLS_LineStyle_Double       = "Double"
;}
;{ #XLS_Color
#XLS_Color_Automatic = "Automatic"
;}
;{ #XLS_Type
#XLS_Type_Number   = "Number"
#XLS_Type_DateTime = "DateTime"
#XLS_Type_Boolean  = "Boolean"
#XLS_Type_String   = "String"
#XLS_Type_Error    = "Error"
;}
;{ #XLS_Underline
#XLS_Underline_None             = "None"
#XLS_Underline_Single           = "Single"
#XLS_Underline_Double           = "Double"
#XLS_Underline_SingleAccounting = "SingleAccounting"
#XLS_Underline_DoubleAccounting = "DoubleAccounting"
;}
;{ #XLS_VerticalAlign
#XLS_VerticalAlign_None        = "None"
#XLS_VerticalAlign_Subscript   = "Subscript"
#XLS_VerticalAlign_Superscript = "Superscript"
;}
;{ #XLS_Family
#XLS_Family_Automatic  = "Automatic"
#XLS_Family_Decorative = "Decorative"
#XLS_Family_Modern     = "Modern"
#XLS_Family_Roman      = "Roman"
#XLS_Family_Script     = "Script"
#XLS_Family_Swiss      = "Swiss"
;}
;{ #XLS_Pattern
#XLS_Pattern_None                  = "None"
#XLS_Pattern_Solid                 = "Solid"
#XLS_Pattern_Gray75                = "Gray75"
#XLS_Pattern_Gray50                = "Gray50"
#XLS_Pattern_Gray25                = "Gray25"
#XLS_Pattern_Gray125               = "Gray125"
#XLS_Pattern_Gray0625              = "Gray0625"
#XLS_Pattern_HorzStripe            = "HorzStripe"
#XLS_Pattern_VertStripe            = "VertStripe"
#XLS_Pattern_ReverseDiagStripe     = "ReverseDiagStripe"
#XLS_Pattern_DiagStripe            = "DiagStripe"
#XLS_Pattern_DiagCross             = "DiagCross"
#XLS_Pattern_ThickDiagCross        = "ThickDiagCross"
#XLS_Pattern_ThinHorzStripe        = "ThinHorzStripe"
#XLS_Pattern_ThinVertStripe        = "ThinVertStripe"
#XLS_Pattern_ThinReverseDiagStripe = "ThinReverseDiagStripe"
#XLS_Pattern_ThinDiagStripe        = "ThinDiagStripe"
#XLS_Pattern_ThinHorzCross         = "ThinHorzCross"
#XLS_Pattern_ThinDiagCross         = "ThinDiagCross"
;}
;{ #XLS_Format
#XLS_Format_General       = "General"
#XLS_Format_GeneralNumber = "General Number"
#XLS_Format_GeneralDate   = "General Date"
#XLS_Format_LongDate      = "Long Date"
#XLS_Format_MediumDate    = "Medium Date"
#XLS_Format_ShortDate     = "Short date"
#XLS_Format_LongTime      = "Long time"
#XLS_Format_MediumTime    = "Medium time"
#XLS_Format_ShortTime     = "Short time"
#XLS_Format_Currency      = "Currency"
#XLS_Format_EuroCurrency  = "Euro Currency"
#XLS_Format_Fixed         = "Fixed"
#XLS_Format_Standard      = "Standard"
#XLS_Format_Percent       = "Percent"
#XLS_Format_Scientific    = "Scientific"
#XLS_Format_YesNo         = "Yes/No"
#XLS_Format_TrueFalse     = "True/False"
#XLS_Format_OnOff         = "On/Off"
;}

;  
;- STRUCTURES - PUBLIC
;  

Structure PureXLS_Alignment
  Horizontal.s   ; Automatic, Left, Center, Right, Fill, Justify, CenterAcrossSelection, Distributed, JustifyDistributed
  Indent.s       ; Unsigned Long
  ReadingOrder.s ; RightToLeft, LeftToRight, Context
  Rotate.s       ; Double (in degrees)
  ShrinkToFit.s  ; Boolean
  Vertical.s     ; Automatic, Top, Bottom, Center, Justify, Distributed, JustifyDistributed
  VerticalText.s ; Boolean
  WrapText.s     ; Boolean
EndStructure
Structure PureXLS_Border
  Position.s  ; Left, Top, Right, Bottom, DiagonalLeft, DiagonalRight
  Color.s     ; #RRGGBB or Automatic
  LineStyle.s ; None, Continuous, Dash, Dot, DashDot, DashDotDot, SlantDashDot, Double
  Weight.s    ; Double (in points)
EndStructure
Structure PureXLS_Cell
  PasteFormula.s  ; String
  ArrayRange.s    ; String
  Formula.s       ; String
  HRef.s          ; String
  Index.s         ; Unsigned Long
  MergeAcross.s   ; Unsigned Long
  MergeDown.s     ; Unsigned Long
  StyleID.s       ; ID Reference
  HRefScreenTip.s ; String
EndStructure
Structure PureXLS_Column
  Caption.s      ; String
  AutoFitWidth.s ; Boolean
  Hidden.s       ; Boolean
  Index.s        ; Unsigned Long
  Span.s         ; Unsigned Long
  StyleID.s      ; ID Reference
  Width.s        ; Double (in points)
EndStructure
Structure PureXLS_Data
  Type.s   ; Number, DateTime, Boolean, String, and Error
  Ticked.s ; Boolean
EndStructure
Structure PureXLS_Font
  Bold.s          ; Boolean
  Color.s         ; #RRGGBB or Automatic
  FontName.s      ; String
  Italic.s        ; Boolean
  Outline.s       ; Boolean
  Shadow.s        ; Boolean
  Size.s          ; Double (in points)
  StrikeThrough.s ; Boolean
  Underline.s     ; None, Single, Double, SingleAccounting, DoubleAccounting
  VerticalAlign.s ; None, Subscript, Superscript
  CharSet.s       ; Unsigned Long
  Family.s        ; Automatic, Decorative, Modern, Roman, Script, Swiss
EndStructure
Structure PureXLS_Interior
  Color.s        ; #RRGGBB or Automatic
  Pattern.s      ; None, Solid, Gray75, Gray50, Gray25, Gray125, Gray0625, HorzStripe, VertStripe, ReverseDiagStripe, DiagStripe, DiagCross, ThickDiagCross, ThinHorzStripe, ThinVertStripe, ThinReverseDiagStripe, ThinDiagStripe, ThinHorzCross, ThinDiagCross
  PatternColor.s ; #RRGGBB or Automatic
EndStructure
Structure PureXLS_NumberFormat
  Format.s ; General, General Number, General Date, Long Date, Medium Date, Short Date, Long Time, Medium Time, Short Time, Currency, Euro Currency, Fixed, Standard, Percent, Scientific, Yes/No, True/False, On/Off
EndStructure
Structure PureXLS_Protection
  Protect.s     ; Boolean
  HideFormula.s ; Boolean
EndStructure
Structure PureXLS_Row
  Caption.s       ; String
  AutoFitHeight.s ; Boolean
  Height.s        ; Double (in points)
  Hidden.s        ; Boolean
  Index.s         ; Unsigned Long
  Span.s          ; Unsigned Long
  StyleID.s       ; ID Reference
EndStructure
Structure PureXLS_Style
  id.s     ; Unique String ID
  name.s   ; String
  Parent.s ; ID Reference
EndStructure
Structure PureXLS_Table
  DefaultColumnWidth.s  ; Double (in points)
  DefaultRowHeight.s    ; Double (in points)
  ExpandedColumnCount.s ; Unsigned Long
  ExpandedRowCount.s    ; Unsigned Long
  LeftCell.s            ; Unsigned Long
  StyleID.s             ; ID Reference
  TopCell.s             ; Unsigned Long
  FullColumns.s         ; Boolean
  FullRows.s            ; Boolean
EndStructure
Structure PureXLS_Worksheet
  name.s        ; String - Cannot contain /, \, ?, *, [, ].
  Protect.s     ; Boolean
  RightToLeft.s ; Boolean
EndStructure

;  
;- MACROS - PRIVATE
;  

Macro PureXLS_WriteString(id, string)
  WriteString(id, string, #PB_UTF8)
EndMacro
Macro PureXLS_WriteStringN(id, string)
  WriteStringN(id, string, #PB_UTF8)
EndMacro

;  
;- PROCEDURES - PRIVATE
;  

Procedure.s PureXLS_Attribute(AttrName.s, AttrValue.s)
  
  If AttrValue 
    ProcedureReturn (" " + AttrName + "=" + #DQUOTE$ + AttrValue + #DQUOTE$)
  EndIf
  
EndProcedure

;  
;- PROCEDURES - PUBLIC
;  

ProcedureDLL.l PureXLS_Workbook(FileName.s)
  
  Protected id.l = CreateFile(#PB_Any, FileName)
  
  If IsFile(id)
    
    PureXLS_WriteString(id, "<?xml")
    PureXLS_WriteString(id, PureXLS_Attribute("version", "1.0"))
    PureXLS_WriteString(id, PureXLS_Attribute("encoding", "UTF-8"))
    PureXLS_WriteStringN(id, " ?>")
    
    PureXLS_WriteString(id, "<Workbook")
    PureXLS_WriteString(id, PureXLS_Attribute("xmlns",      "urn:schemas-microsoft-com:office:spreadsheet"))
    PureXLS_WriteString(id, PureXLS_Attribute("xmlns:x",    "urn:schemas-microsoft-com:office:excel"))
    PureXLS_WriteString(id, PureXLS_Attribute("xmlns:ss",   "urn:schemas-microsoft-com:office:spreadsheet"))
    PureXLS_WriteString(id, PureXLS_Attribute("xmlns:html", "http://www.w3.org/TR/REC-html40"))
    PureXLS_WriteStringN(id, ">")
    
  EndIf
  
  ProcedureReturn id
  
EndProcedure
ProcedureDLL.l PureXLS_EndWorkbook(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Workbook>")
    CloseFile(id)
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Worksheet(id.l, name.s, Protect.s = "0", RightToLeft.s = "0")
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Worksheet")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Name",        name))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Protected",   Protect))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:RightToLeft", RightToLeft))
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_WorksheetI(id.l, *x.PureXLS_Worksheet = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Worksheet")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Name",        *x\name))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Protected",   *x\Protect))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:RightToLeft", *x\RightToLeft))
    EndIf
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_EndWorksheet(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Worksheet>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Styles(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "<Styles>")
    ProcedureReturn #True
  EndIf
  
EndProcedure  
ProcedureDLL.l PureXLS_EndStyles(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Styles>")
  EndIf
  
EndProcedure  

ProcedureDLL.l PureXLS_Style(doc.l, id.s, name.s = "", Parent.s = "")
  
  If IsFile(doc)
    PureXLS_WriteString(doc, "<Style")
    PureXLS_WriteString(doc, PureXLS_Attribute("ss:ID",     id))
    PureXLS_WriteString(doc, PureXLS_Attribute("ss:Name",   name))
    PureXLS_WriteString(doc, PureXLS_Attribute("ss:Parent", Parent))
    PureXLS_WriteStringN(doc, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure 
ProcedureDLL.l PureXLS_StyleI(id.l, *x.PureXLS_Style = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Style")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ID",     *x\id))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Name",   *x\name))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Parent", *x\Parent))
    EndIf
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure 
ProcedureDLL.l PureXLS_EndStyle(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Style>")
  EndIf
  
EndProcedure  

ProcedureDLL.l PureXLS_Font(id.l, FontName.s = "Arial", Size.s = "12", Color.s = "#000000", Bold.s = "0")
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Font")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Bold",     Bold))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Color",    Color))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:FontName", FontName))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Size",     Size))
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_FontI(id.l, *x.PureXLS_Font = #Null)
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Font")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Bold",          *x\Bold))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Color",         *x\Color))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:FontName",      *x\FontName))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Italic",        *x\Italic))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Outline",       *x\Outline))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Shadow",        *x\Shadow))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Size",          *x\Size))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:StrikeThrough", *x\StrikeThrough))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Underline",     *x\Underline))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:VerticalAlign", *x\VerticalAlign))
      PureXLS_WriteString(id, PureXLS_Attribute("x:CharSet",        *x\CharSet))
      PureXLS_WriteString(id, PureXLS_Attribute("x:Family",         *x\Family))
    EndIf
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Borders(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "<Borders>")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_EndBorders(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Borders>")
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_Border(id.l, Position.s, LineStyle.s = "Continuous", Weight.s = "1", Color.s = "Automatic")
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Border")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Position",  Position))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:LineStyle", LineStyle))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Weight",    Weight))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Color",     Color))
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Interior(id.l, Color.s = "#FFFFFF", Pattern.s = "Solid", PatternColor.s = "")
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Interior")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Color",        Color))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Pattern",      Pattern))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:PatternColor", PatternColor))
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_InteriorI(id.l, *x.PureXLS_Interior = #Null)
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Interior")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Color",        *x\Color))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Pattern",      *x\Pattern))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:PatternColor", *x\PatternColor))
    EndIf
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Alignment(id.l, Horizontal.s = "Left", Vertical.s = "Bottom")
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Alignment") 
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Horizontal", Horizontal))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Vertical",   Vertical))
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_AlignmentI(id.l, *x.PureXLS_Alignment = #Null)
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Alignment") 
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Horizontal",   *x\Horizontal))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Indent",       *x\Indent))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ReadingOrder", *x\ReadingOrder))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Rotate",       *x\Rotate))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ShrinkToFit",  *x\ShrinkToFit))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Vertical",     *x\Vertical))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:VerticalText", *x\VerticalText))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:WrapText",     *x\WrapText))
    EndIf
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Table(id.l, DefaultColumnWidth.s = "", DefaultRowHeight.s = "", StyleID.s = "")
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Table")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:DefaultColumnWidth", DefaultColumnWidth))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:DefaultRowHeight",   DefaultRowHeight))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID",            StyleID))
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_TableI(id.l, *x.PureXLS_Table = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Table")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("ss:DefaultColumnWidth",  *x\DefaultColumnWidth))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:DefaultRowHeight",    *x\DefaultRowHeight))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ExpandedColumnCount", *x\ExpandedColumnCount))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ExpandedRowCount",    *x\ExpandedRowCount))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:LeftCell",            *x\LeftCell))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID",             *x\StyleID))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:TopCell",             *x\TopCell))
      PureXLS_WriteString(id, PureXLS_Attribute("x:FullColumns",          *x\FullColumns))
      PureXLS_WriteString(id, PureXLS_Attribute("x:FullRows",             *x\FullRows))
    EndIf
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_EndTable(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Table>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Column(id.l, Width.s = "", StyleID.s = "")
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Column")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID", StyleID))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Width",   Width))
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_ColumnI(id.l, *x.PureXLS_Column = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Column")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("c:Caption",       *x\Caption))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:AutoFitWidth", *x\AutoFitWidth))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Hidden",       *x\Hidden))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Index",        *x\Index))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Span",         *x\Span))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID",      *x\StyleID))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Width",        *x\Width))
    EndIf
    PureXLS_WriteStringN(id, "/>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Row(id.l, Height.s = "", StyleID.s = "")
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Row")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Height",  Height))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID", StyleID))
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_RowI(id.l, *x.PureXLS_Row = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Row")
    If *x
      PureXLS_WriteString(id, PureXLS_Attribute("c:Caption",        *x\Caption))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:AutoFitHeight", *x\AutoFitHeight))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Height",        *x\Height))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Hidden",        *x\Hidden))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Index",         *x\Index))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Span",          *x\Span))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID",       *x\StyleID))
    EndIf
    PureXLS_WriteStringN(id, ">")
    ProcedureReturn #True
  EndIf
  
EndProcedure
ProcedureDLL.l PureXLS_EndRow(id.l)
  
  If IsFile(id)
    PureXLS_WriteStringN(id, "</Row>")
  EndIf
  
EndProcedure

ProcedureDLL.l PureXLS_Cell(id.l, Value.s, Type.s = "String", StyleID.s = "", Formula.s = "")
  
  If IsFile(id) 
    PureXLS_WriteString(id, "<Cell")
    PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID", StyleID))
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Formula", Formula))
    PureXLS_WriteString(id, ">") 
    If Value<>""
      PureXLS_WriteString(id, "<Data") 
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Type", Type)) 
      PureXLS_WriteString(id, ">") 
      PureXLS_WriteString(id, Value) 
      PureXLS_WriteStringN(id, "</Data>")
    EndIf
    PureXLS_WriteStringN(id, "</Cell>") 
  EndIf 
  
EndProcedure
ProcedureDLL.l PureXLS_CellI(id.l, Value.s, *c.PureXLS_Cell = #Null, *d.PureXLS_Data = #Null)
  
  If IsFile(id)
    PureXLS_WriteString(id, "<Cell")
    If *c
      PureXLS_WriteString(id, PureXLS_Attribute("c:PasteFormula",   *c\PasteFormula))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:ArrayRange",    *c\ArrayRange))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Formula",       *c\Formula))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:HRef",          *c\HRef))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Index",         *c\Index))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:MergeAcross",   *c\MergeAcross))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:MergeDown",     *c\MergeDown))
      PureXLS_WriteString(id, PureXLS_Attribute("ss:StyleID",       *c\StyleID))
      PureXLS_WriteString(id, PureXLS_Attribute("x:HRefScreenTip",  *c\HRefScreenTip))
    EndIf
    PureXLS_WriteString(id, ">")
    If Value<>""
      PureXLS_WriteString(id, "<Data")
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Type",  *d\Type))
      PureXLS_WriteString(id, PureXLS_Attribute("x:Ticked", *d\Ticked))
      PureXLS_WriteString(id, ">")
      PureXLS_WriteString(id, Value) 
      PureXLS_WriteStringN(id, "</Data>")
    EndIf
    PureXLS_WriteStringN(id, "</Cell>")
  EndIf
  
EndProcedure

ProcedureDLL.s XLS_FormatDate(Date$,Format$)
  If Date$
    ProcedureReturn FormatDate("%yyyy-%mm-%ddT%hh:%ii:%ss.000",ParseDate(Format$,Date$))
  Else
    ProcedureReturn ""
  EndIf
EndProcedure

;  
;- END OF INCLUDE
;  

DisableExplicit

; IDE Options = PureBasic 4.50 (Windows - x86)
; CursorPosition = 680
; FirstLine = 656
; Folding = --------
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
User avatar
blueb
Addict
Addict
Posts: 1116
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Re: Read/write xls(x)?

Post by blueb »

And here's an example (still works but creates an 'earlier' version of Excel):

Code: Select all


;-

XIncludeFile "PureXLS.pbi"

;-

#OUTPUT_FILE = "sheet.xls"

doc = PureXLS_Workbook(#OUTPUT_FILE) 

If doc
  
  ; Workbook -> Styles
  
  If PureXLS_Styles(doc)
    
    ; Workbook -> Styles -> Style -> myFirstRow
    
    If PureXLS_Style(doc, "myFirstRow")
      PureXLS_Font(doc, "Arial", "10", "#000000", "1")
      PureXLS_Interior(doc, "#808080", #XLS_Pattern_Solid)
      PureXLS_Alignment(doc, #XLS_Horizontal_Center, #XLS_Vertical_Center)
      If PureXLS_Borders(doc)
        PureXLS_Border(doc, #XLS_Position_Bottom, #XLS_LineStyle_Continuous, "3", "#000000")
        PureXLS_Border(doc, #XLS_Position_Left,   #XLS_LineStyle_Continuous, "1")
        PureXLS_Border(doc, #XLS_Position_Right,  #XLS_LineStyle_Continuous, "3", "Red")
        PureXLS_Border(doc, #XLS_Position_Top,    #XLS_LineStyle_Continuous, "1")
        PureXLS_EndBorders(doc)
      EndIf
      PureXLS_EndStyle(doc)
    EndIf
    
    ; Workbook -> Styles -> Style -> myFirstColumn
    
    If PureXLS_Style(doc, "myFirstColumn")
      PureXLS_Font(doc, "Arial", "8", "#0000FF", "1")
      PureXLS_Interior(doc, "#00FF00", #XLS_Pattern_Solid)
      PureXLS_Alignment(doc, #XLS_Horizontal_Center, #XLS_Vertical_Center)
      PureXLS_EndStyle(doc)
    EndIf
    
    ; Workbook -> Styles -> Style -> myNumber
    
    If PureXLS_Style(doc, "myNumber")
      PureXLS_Font(doc, "Tahoma", "8", "#008800", "1")
      PureXLS_Interior(doc, "#C0C0FF", #XLS_Pattern_Solid)
      PureXLS_Alignment(doc, #XLS_Horizontal_Right, #XLS_Vertical_Center)
      If PureXLS_Borders(doc)
        PureXLS_Border(doc, #XLS_Position_Bottom, #XLS_LineStyle_DashDotDot)
        PureXLS_Border(doc, #XLS_Position_Right,  #XLS_LineStyle_DashDotDot)
        PureXLS_EndBorders(doc)
      EndIf 
      PureXLS_EndStyle(doc)
    EndIf
    
    PureXLS_EndStyles(doc)
    
  EndIf
  
  ; Workbook -> Worksheet
  
  If PureXLS_Worksheet(doc, "mySheet")
    
    ; Workbook -> Worksheet -> Table
    
    If PureXLS_Table(doc, "100", "30")
      
      ; Workbook -> Worksheet -> Table -> Columns
      
      PureXLS_Column(doc,  "50", "myFirstColumn")
      PureXLS_Column(doc, "150")
      PureXLS_Column(doc, "150")
      PureXLS_Column(doc,  "80", "myNumber")
      
      ; Workbook -> Worksheet -> Table -> First row
      
      If PureXLS_Row(doc, "20")
        PureXLS_Cell(doc, "ID",       #XLS_Type_String, "myFirstRow")
        PureXLS_Cell(doc, "Software", #XLS_Type_String, "myFirstRow")
        PureXLS_Cell(doc, "Author",   #XLS_Type_String, "myFirstRow")
        PureXLS_Cell(doc, "Price",    #XLS_Type_String, "myFirstRow")
        PureXLS_EndRow(doc)
      EndIf
      
      ; Workbook -> Worksheet -> Table -> Populate Rows
      
      For i = 1 To 20
        If PureXLS_Row(doc, "14")
          PureXLS_Cell(doc, "ID" + RSet(Str(i), 2, "0"))
          PureXLS_Cell(doc, "PureBasic 4.0")
          PureXLS_Cell(doc, "Fantaisie Software")
          PureXLS_Cell(doc, Str(Random(100)+10), #XLS_Type_Number)
          PureXLS_EndRow(doc)
        EndIf
      Next
      
      If PureXLS_Row(doc, "14")
        PureXLS_Cell(doc, "")
        PureXLS_Cell(doc, "")
        PureXLS_Cell(doc, "Average:")
        PureXLS_Cell(doc, "", #XLS_Type_Number, "myNumber", "=AVERAGE(R[-20]C[0]:R[-1]C[0])")
        PureXLS_EndRow(doc)
      EndIf
      
      PureXLS_EndTable(doc)
      
    EndIf
    
    PureXLS_EndWorksheet(doc)
    
  EndIf
  
  PureXLS_EndWorkbook(doc)
  
  RunProgram(#OUTPUT_FILE)
  
EndIf

;-

End

- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

Re: Read/write xls(x)?

Post by doctorized »

Hi blub, thank you for the reply. The code creates old MS Excel 5.0/95 files, which, when I try to open them with Excel 2016 it says "File format and extension of 'sheet.xls' don't match. The file could be corrupted or unsafe. Unless you trust its source, don't open it. Do you want to open it anyway?". If I click yes, then the file opens and is read OK. I created a new MS Excel 5.0/95 file with my Excel and it opens it without growling. I need something newer.
User avatar
mk-soft
Always Here
Always Here
Posts: 6240
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Read/write xls(x)?

Post by mk-soft »

Three ways...
1. Database drivers for excel
2. COMatePlus
3. ActiveScript
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

Re: Read/write xls(x)?

Post by doctorized »

I managed to write xls/xlsx file with a VBscript and now I am trying to read the file. I have another VBscript that reads the data from the xls file and it has a function which returns the xls data read in array. Is there a way to get this array in PB? I am thinking of editing the VBscript to write these data to a CSV file and then read the CSV file in PB. Is there any quicker/direct way?
User avatar
mk-soft
Always Here
Always Here
Posts: 6240
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Read/write xls(x)?

Post by mk-soft »

My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

Re: Read/write xls(x)?

Post by doctorized »

mk-soft wrote:ActiveScript for PB...

Link: https://www.purebasic.fr/german/viewtop ... =8&t=31072
2,400 lines of code (plus the script) just to parse the vbs code to run it? With less 70 lines (script and PB) I write my script to a vbs file, I run it to create csv file and then I read the csv with PB.
Mol4yn
New User
New User
Posts: 2
Joined: Fri Jul 12, 2019 4:40 pm

Re: Read/write xls(x)?

Post by Mol4yn »

doctorized wrote:Is there a way to read and write Excel files, .xls and/or .xlsx? I have found some older posts but nothing is working. I found reference to PureXls but all links are dead.
take a look viewtopic.php?p=504952#p504952
HanPBF
Enthusiast
Enthusiast
Posts: 570
Joined: Fri Feb 19, 2010 3:42 am

Re: Read/write xls(x)?

Post by HanPBF »

http://www.libxl.com/
It has C access.
zikitrake
Addict
Addict
Posts: 869
Joined: Thu Mar 25, 2004 2:15 pm
Location: Spain

Re: Read/write xls(x)?

Post by zikitrake »

HanPBF wrote:http://www.libxl.com/
It has C access.
Hi, have you worked with this lib?
I bought it but I have problems when I record large amounts of data in xlsx format (a 1500-2000 rows with about 4000 characters each in 20 columns).
I converted the definitions file from Powerbasic, but I'm not very good at managing libraries.
Can you see if anything is wrong?
Thanks!

libXL_include.pbi

Code: Select all

EnableExplicit

XIncludeFile "libXL_enum.pbi"

Structure STRLibXLbook
  extension.s ; xls or xlsx
  *bookID
  sheet.i
  formatWrap.i
EndStructure

Global libXLid.i = 0

Procedure.l libXLInit() 
  Protected DLLruta.s
  
  DLLruta = GetPathPart(ProgramFilename()) + "libxl.dll"  
  
  libXLid  = OpenLibrary(#PB_Any, DLLruta)
  If libXLid = 0
    MessageRequester("Open DLL error", "File 'libxl.dll' not found or not valid", #PB_MessageRequester_Error)
    End
  EndIf  
  ProcedureReturn libXLid
EndProcedure

Procedure.l libXLClose()
  Protected res.l  = 0  
  res = CloseLibrary(libXLid)
  ProcedureReturn res
EndProcedure


Structure STRLibXLbook
  extension.s ; xls or xlsx
  *bookID
  sheet.i
  formatWrap.i
EndStructure

;- ========================
;- Book function declarations
;- ========================
Procedure.i xlCreateBook()
  ProcedureReturn CallCFunction(libXLid, "xlCreateBookCW")
EndProcedure
Procedure.i xlCreateXMLBook()
  ProcedureReturn CallCFunction(libXLid, "xlCreateXMLBookCW")
EndProcedure
Procedure.i xlBookLoad(book.i, fileName.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookLoadW", book, @fileName)
EndProcedure
Procedure.i xlBookSave(book.i, fileName.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookSaveW", book, @fileName)
EndProcedure
Procedure.i xlBookLoadRaw(book.i, fileData.s, fileSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookLoadRawW", book, @fileData, fileSize)
EndProcedure
Procedure.i xlBookSaveRaw(book.i, fileData.s, fileSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSaveRawW", book, @fileData, fileSize)
EndProcedure
Procedure.i xlBookAddSheet(book.i, sheetName.s, initSheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddSheetW", book, @sheetName, initSheet)
EndProcedure
Procedure.i xlBookInsertSheet(book.i, index.i, sheetName.s, initSheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookInsertSheetW", book, index, @sheetName, initSheet)
EndProcedure
Procedure.i xlBookGetSheet(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookGetSheetW", book, index)
EndProcedure
Procedure.i xlBookSheetType(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSheetTypeW", book, index)
EndProcedure
Procedure.i xlBookDelSheet(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookDelSheetW", book, index)
EndProcedure
Procedure.i xlBookSheetCount(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSheetCountW", book)
EndProcedure
Procedure.i xlBookAddFormat(book.i, initFormat.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddFormatW", book, initFormat)
EndProcedure
Procedure.i xlBookAddFont(book.i, initFont.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddFontW", book, initFont)
EndProcedure
Procedure.i xlBookAddCustomNumFormat(book.i, customNumFormat.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddCustomNumFormatW", book, @customNumFormat)
EndProcedure
Procedure.l xlBookCustomNumFormat(book.i, format.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookCustomNumFormatW", book, format)
EndProcedure
Procedure.i xlBookFormat(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookFormatW", book, index)
EndProcedure
Procedure.i xlBookFormatSize(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookFormatSizeW", book)
EndProcedure
Procedure.i xlBookFont(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookFontW", book, index)
EndProcedure
Procedure.i xlBookFontSize(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookFontSizeW", book)
EndProcedure
Procedure.d xlBookDatePack(book.i, year.i, month.i, day.i, hour.i, minute.i, second.i, millisecond.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookDatePackW", book, year, month, day, hour, minute, second, millisecond)
EndProcedure
Procedure.i xlBookDateUnpack(book.i, value.d, year.i, month.i, day.i, hour.i, minute.i, second.i, millisecond.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookDateUnpackW", book, value, year, month, day, hour, minute, second, millisecond)
EndProcedure
Procedure.i xlBookColorPack(book.i, red.i, green.i, blue.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookColorPackW", book, red, green, blue)
EndProcedure
Procedure.i xlBookColorUnpack(book.i, value.i, red.i, green.i, blue.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookColorUnpackW", book, value, red, green, blue)
EndProcedure
Procedure.i xlBookActiveSheet(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookActiveSheetW", book)
EndProcedure
Procedure.i xlBookSetActiveSheet(book.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetActiveSheetW", book, index)
EndProcedure
Procedure.i xlBookPictureSize(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookPictureSizeW", book)
EndProcedure
Procedure.i xlBookGetPicture(book.i, index.i, picData.s, picSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookGetPictureW", book, index, @picData, picSize)
EndProcedure
Procedure.i xlBookAddPicture(book.i, filename.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddPictureW", book, @filename)
EndProcedure
Procedure.i xlBookAddPicture2(book.i, picData.s, picSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookAddPicture2W", book, @picData, picSize)
EndProcedure
Procedure.l xlBookDefaultFont(book.i, fontSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookDefaultFontW", book, fontSize)
EndProcedure
Procedure.i xlBookSetDefaultFont(book.i, fontName.s, fontSize.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetDefaultFontW", book, @fontName, fontSize)
EndProcedure
Procedure.i xlBookRefR1C1(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookRefR1C1W", book)
EndProcedure
Procedure.i xlBookSetRefR1C1(book.i, refR1C1.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetRefR1C1W", book, refR1C1)
EndProcedure
Procedure.i xlBookSetKey(book.i, keyname.s, key.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetKeyW", book, @keyname, @key)
EndProcedure
Procedure.i xlBookRgbMode(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookRgbModeW", book)
EndProcedure
Procedure.i xlBookSetRgbMode(book.i, rgbMode.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetRgbModeW", book, rgbMode)
EndProcedure
Procedure.i xlBookVersion(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookVersionW", book)
EndProcedure
Procedure.i xlBookBiffVersion(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookBiffVersionW", book)
EndProcedure
Procedure.i xlBookIsDate1904(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookIsDate1904W", book)
EndProcedure
Procedure.i xlBookSetDate1904(book.i, date1904.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetDate1904W", book, date1904)
EndProcedure
Procedure.i xlBookIsTemplate(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookIsTemplateW", book)
EndProcedure
Procedure.i xlBookSetTemplate(book.i, tmpl.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetTemplateW", book, tmpl)
EndProcedure
Procedure.i xlBookSetLocale(book.i, tmpl.s)
  ProcedureReturn CallCFunction(libXLid, "xlBookSetLocaleW", book, @tmpl)
EndProcedure
Procedure.l xlBookErrorMessage(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookErrorMessageW", book)
EndProcedure
Procedure.i xlBookRelease(book.i)
  ProcedureReturn CallCFunction(libXLid, "xlBookReleaseW", book)
EndProcedure
;-
;- ========================
;- Sheet function declarations
;- ========================
Procedure.i xlSheetCellType(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetCellTypeW", sheet, row, col)
EndProcedure
Procedure.i xlSheetIsFormula(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetIsFormulaW", sheet, row, col)
EndProcedure
Procedure.i xlSheetCellFormat(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetCellFormatW", sheet, row, col)
EndProcedure
Procedure.i xlSheetSetCellFormat(sheet.i, row.i, col.i, format.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetCellFormatW", sheet, row, col, format)
EndProcedure
Procedure.l xlSheetReadStr(sheet.i, row.i, col.i, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadStrW", sheet, row, col, *format)
EndProcedure
Procedure.i xlSheetWriteStr(sheet.i, row.i, col.i, value.s, format.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteStrW", sheet, row, col, @value, format)
EndProcedure
Procedure.d xlSheetReadNum(sheet.i, row.i, col.i, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadNumW", sheet, row, col, *format)
EndProcedure
Procedure.i xlSheetWriteNum(sheet.i, row.i, col.i, value.d, format.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteNumW", sheet, row, col, value, format)
EndProcedure
Procedure.i xlSheetReadBool(sheet.i, row.i, col.i, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadBoolW", sheet, row, col, *format)
EndProcedure
Procedure.i xlSheetWriteBool(sheet.i, row.i, col.i, value.i, format.i )
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteBoolW", sheet, row, col, value, format)
EndProcedure
Procedure.i xlSheetReadBlank(sheet.i, row.i, col.i, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadBlankW", sheet, row, col, *format)
EndProcedure
Procedure.i xlSheetWriteBlank(sheet.i, row.i, col.i, format.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteBlankW", sheet, row, col, format)
EndProcedure
Procedure.l xlSheetReadFormula(sheet.i, row.i, col.i, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadFormulaW", sheet, row, col, *format)
EndProcedure
Procedure.i xlSheetWriteFormula(sheet.i, row.i, col.i, value.s, *format)
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteFormulaW", sheet, row, col, @value, *format)
EndProcedure
Procedure.l xlSheetReadComment(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadCommentW", sheet, row, col)
EndProcedure
Procedure.i xlSheetWriteComment(sheet.i, row.i, col.i, value.s, author.s, width_.i, height_.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetWriteCommentW", sheet, row, col, @value, @author, width_, height_)
EndProcedure
Procedure.i xlSheetIsDate(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetIsDateW", sheet, row, col)
EndProcedure
Procedure.i xlSheetReadError(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetReadErrorW", sheet, row, col)
EndProcedure
Procedure.d xlSheetColWidth(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetColWidthW", sheet, row, col)
EndProcedure
Procedure.d xlSheetRowHeight(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRowHeightW", sheet, row, col)
EndProcedure
Procedure.i xlSheetSetCol(sheet.i, colFirst.i, colLast.i, width.d, format.i, hidden_.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetColW", sheet, colFirst, colLast, width, format, hidden_)
EndProcedure
Procedure.i xlSheetSetRow(sheet.i, row.i, height.d, format.i, hidden_.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetRowW", sheet, row, height, format, hidden_)
EndProcedure
Procedure.i xlSheetRowHidden(sheet.i, row.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRowHiddenW", sheet, row)
EndProcedure
Procedure.i xlSheetSetRowHidden(sheet.i, row.i, hidden_.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetRowHiddenW", sheet, row, hidden_)
EndProcedure
Procedure.i xlSheetColHidden(sheet.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetColHiddenW", sheet, col)
EndProcedure
Procedure.i xlSheetSetColHidden(sheet.i, col.i, hidden.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetColHiddenW", sheet, col, hidden)
EndProcedure
Procedure.i xlSheetGetMerge(sheet.i, row.i, col.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetMergeW", sheet, row, col, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetSetMerge(sheet.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetMergeW", sheet, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetDelMerge(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetDelMergeW", sheet, row, col)
EndProcedure
Procedure.i xlSheetMergeSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMergeSizeW", sheet)
EndProcedure
Procedure.i xlSheetMerge(sheet.i, index.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMergeW", sheet, index, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetDelMergeByIndex(sheet.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetDelMergeByIndexW", sheet, index)
EndProcedure
Procedure.i xlSheetPictureSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetPictureSizeW", sheet)
EndProcedure
Procedure.i xlSheetGetPicture(sheet.i, index.i, rowTop.i, colLeft.i, rowBottom.i, colRight.i, width.i , height.i , offset_x.i , offset_y.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetPictureW", sheet, index, rowTop, colLeft, rowBottom, colRight, width, height, offset_x, offset_y)
EndProcedure
Procedure.i xlSheetSetPicture(sheet.i, row.i, col.i, pictureId.i, scale.d, offset_x.i, offset_y.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPictureW", sheet, row, col, pictureId, scale, offset_x, offset_y)
EndProcedure
Procedure.i xlSheetSetPicture2(sheet.i, row.i, col.i, pictureId.i, width.i, height.i, offset_x.i, offset_y.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPicture2W", sheet, row, col, pictureId, width, height, offset_x, offset_y)
EndProcedure
Procedure.i xlSheetGetHorPageBreak(sheet.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetHorPageBreakW", sheet, index)
EndProcedure
Procedure.i xlSheetGetHorPageBreakSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetHorPageBreakSizeW", sheet)
EndProcedure
Procedure.i xlSheetGetVerPageBreak(sheet.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetVerPageBreakW", sheet, index)
EndProcedure
Procedure.i xlSheetGetVerPageBreakSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetVerPageBreakSizeW", sheet)
EndProcedure
Procedure.i xlSheetSetHorPageBreak(sheet.i, row.i, pageBreak.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetHorPageBreakW", sheet, row, pageBreak)
EndProcedure
Procedure.i xlSheetSetVerPageBreak(sheet.i, col.i, pageBreak.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetVerPageBreakW", sheet, col, pageBreak)
EndProcedure
Procedure.i xlSheetSplit(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSplitW", sheet, row, col)
EndProcedure
Procedure.i xlSheetSplitInfo(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSplitInfoW", sheet, row, col)
EndProcedure
Procedure.i xlSheetGroupRows(sheet.i, rowFirst.i, rowLast.i, collapsed.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGroupRowsW", sheet, rowFirst, rowLast, collapsed)
EndProcedure
Procedure.i xlSheetGroupCols(sheet.i, colFirst.i, colLast.i, collapsed.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGroupColsW", sheet, colFirst, colLast, collapsed)
EndProcedure
Procedure.i xlSheetGroupSummaryBelow(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGroupSummaryBelowW", sheet)
EndProcedure
Procedure.i xlSheetSetGroupSummaryBelow(sheet.i, below.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetGroupSummaryBelowW", sheet, below)
EndProcedure
Procedure.i xlSheetGroupSummaryRight(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGroupSummaryRightW", sheet)
EndProcedure
Procedure.i xlSheetSetGroupSummaryRight(sheet.i, right.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetGroupSummaryRightW", sheet, right)
EndProcedure
Procedure.i xlSheetClear(sheet.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetClearW", sheet, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetInsertCol(sheet.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetInsertColW", sheet, colFirst, colLast)
EndProcedure
Procedure.i xlSheetInsertRow(sheet.i, rowFirst.i, rowLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetInsertRowW", sheet, rowFirst, rowLast)
EndProcedure
Procedure.i xlSheetRemoveCol(sheet.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRemoveColW", sheet, colFirst, colLast)
EndProcedure
Procedure.i xlSheetRemoveRow(sheet.i, rowFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRemoveRowW", sheet, rowFirst, colLast)
EndProcedure
Procedure.i xlSheetCopyCell(sheet.i, rowSrc.i, colSrc.i, rowDst.i, colDst.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetCopyCellW", sheet, rowSrc, colSrc, rowDst, colDst)
EndProcedure
Procedure.i xlSheetFirstRow(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetFirstRowW", sheet)
EndProcedure
Procedure.i xlSheetLastRow(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetLastRowW", sheet)
EndProcedure
Procedure.i xlSheetFirstCol(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetFirstColW", sheet)
EndProcedure
Procedure.i xlSheetLastCol(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetLastColW", sheet)
EndProcedure
Procedure.i xlSheetDisplayGridlines(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetDisplayGridlinesW", sheet)
EndProcedure
Procedure.i xlSheetSetDisplayGridlines(sheet.i, show.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetDisplayGridlinesW", sheet, show)
EndProcedure
Procedure.i xlSheetPrintGridlines(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetPrintGridlinesW", sheet)
EndProcedure
Procedure.i xlSheetSetPrintGridlines(sheet.i, print.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintGridlinesW", sheet, print)
EndProcedure
Procedure.i xlSheetZoom(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetZoomW", sheet)
EndProcedure
Procedure.i xlSheetSetZoom(sheet.i, zoom.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetZoomW", sheet, zoom)
EndProcedure
Procedure.i xlSheetPrintZoom(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetPrintZoomW", sheet)
EndProcedure
Procedure.i xlSheetSetPrintZoom(sheet.i, zoom.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintZoomW", sheet, zoom)
EndProcedure
Procedure.i xlSheetGetPrintFit(sheet.i, wPages.i, hPages.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetPrintFitW", sheet, wPages, hPages)
EndProcedure
Procedure.i xlSheetSetPrintFit(sheet.i, wPages.i, hPages.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintFitW", sheet, wPages, hPages)
EndProcedure
Procedure.i xlSheetLandscape(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetLandscapeW", sheet)
EndProcedure
Procedure.i xlSheetSetLandscape(sheet.i, landscape.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetLandscapeW", sheet, landscape)
EndProcedure
Procedure.i xlSheetPaper(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetPaperW", sheet)
EndProcedure
Procedure.i xlSheetSetPaper(sheet.i, paper.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPaperW", sheet, paper)
EndProcedure
Procedure.l xlSheetHeader(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHeaderW", sheet)
EndProcedure
Procedure.i xlSheetSetHeader(sheet.i, header.s, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetHeaderW", sheet, @header, margin)
EndProcedure
Procedure.d xlSheetHeaderMargin(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHeaderMarginW", sheet)
EndProcedure
Procedure.l xlSheetFooter(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetFooterW", sheet)
EndProcedure
Procedure.i xlSheetSetFooter(sheet.i, footer.s, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetFooterW", sheet, @footer, margin)
EndProcedure
Procedure.d xlSheetFooterMargin(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetFooterMarginW", sheet, row, col)
EndProcedure
Procedure.i xlSheetHCenter(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHCenterW", sheet)
EndProcedure
Procedure.i xlSheetSetHCenter(sheet.i, hCenter.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetHCenterW", sheet, hCenter)
EndProcedure
Procedure.i xlSheetVCenter(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetVCenterW", sheet)
EndProcedure
Procedure.i xlSheetSetVCenter(sheet.i, vCenter.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetVCenterW", sheet, vCenter)
EndProcedure
Procedure.d xlSheetMarginLeft(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMarginLeftW", sheet)
EndProcedure
Procedure.i xlSheetSetMarginLeft(sheet.i, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetMarginLeftW", sheet, margin)
EndProcedure
Procedure.d xlSheetMarginRight(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMarginRightW", sheet)
EndProcedure
Procedure.i xlSheetSetMarginRight(sheet.i, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetMarginRightW", sheet, margin)
EndProcedure
Procedure.d xlSheetMarginTop(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMarginTopW", sheet)
EndProcedure
Procedure.i xlSheetSetMarginTop(sheet.i, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetMarginTopW", sheet, margin)
EndProcedure
Procedure.d xlSheetMarginBottom(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetMarginBottomW", sheet)
EndProcedure
Procedure.i xlSheetSetMarginBottom(sheet.i, margin.d)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetMarginBottomW", sheet, margin)
EndProcedure
Procedure.i xlSheetPrintRowCol(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetPrintRowColW", sheet)
EndProcedure
Procedure.i xlSheetSetPrintRowCol(sheet.i, print.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintRowColW", sheet, print)
EndProcedure
Procedure.i xlSheetSetPrintRepeatRows(sheet.i, rowFirst.i, rowLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintRepeatRowsW", sheet, rowFirst, rowLast)
EndProcedure
Procedure.i xlSheetSetPrintRepeatCols(sheet.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintRepeatColsW", sheet, colFirst, colLast)
EndProcedure
Procedure.i xlSheetSetPrintArea(sheet.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetPrintAreaW", sheet, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetClearPrintRepeats(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetClearPrintRepeatsW", sheet)
EndProcedure
Procedure.i xlSheetClearPrintArea(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetClearPrintAreaW", sheet)
EndProcedure
Procedure.i xlSheetGetNamedRange(sheet.i, rangeName.s, rowFirst.i, rowLast.i, colFirst.i, colLast.i, scopeId.i, hidden_.i )
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetNamedRangeW", sheet, @rangeName, rowFirst, rowLast, colFirst, colLast, scopeId, hidden_)
EndProcedure
Procedure.i xlSheetSetNamedRange(sheet.i, rangeName.s, rowFirst.i, rowLast.i, colFirst.i, colLast.i, scopeId.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetNamedRangeW", sheet, @rangeName, rowFirst, rowLast, colFirst, colLast, scopeId)
EndProcedure
Procedure.i xlSheetDelNamedRange(sheet.i, rangeName.s, scopeId.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetDelNamedRangeW", sheet, @rangeName, scopeId)
EndProcedure
Procedure.i xlSheetNamedRangeSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetNamedRangeSizeW", sheet)
EndProcedure
Procedure.l xlSheetNamedRange(sheet.i, index.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i, scopeId.i, hidden_.i )
  ProcedureReturn CallCFunction(libXLid, "xlSheetNamedRangeW", sheet, index, rowFirst, rowLast, colFirst, colLast, scopeId, hidden_)
EndProcedure
Procedure.i xlSheetHyperlinkSize(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHyperlinkSizeW", sheet)
EndProcedure
Procedure.l xlSheetHyperlink(sheet.i, index.i, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHyperlinkW", sheet, index, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.i xlSheetDelHyperlink(sheet.i, index.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetDelHyperlinkW", sheet, index)
EndProcedure
Procedure.i xlSheetAddHyperlink(sheet.i, hyperlink.s, rowFirst.i, rowLast.i, colFirst.i, colLast.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetAddHyperlinkW", sheet, @hyperlink, rowFirst, rowLast, colFirst, colLast)
EndProcedure
Procedure.l xlSheetName(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetNameW", sheet)
EndProcedure
Procedure.i xlSheetSetName(sheet.i, sheetName.s)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetNameW", sheet, @sheetName)
EndProcedure
Procedure.i xlSheetProtect(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetProtectW", sheet)
EndProcedure
Procedure.i xlSheetSetProtect(sheet.i, protect.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetProtectW", sheet, protect)
EndProcedure
Procedure.i xlSheetSetProtectEx(sheet.i, protect.i, password.s, prot.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetProtectExW", sheet, protect, @password, prot)
EndProcedure
Procedure.i xlSheetHidden(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetHiddenW", sheet)
EndProcedure
Procedure.i xlSheetSetHidden(sheet.i, hidden.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetHiddenW", sheet, hidden)
EndProcedure
Procedure.i xlSheetGetTopLeftView(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetGetTopLeftViewW", sheet, row, col)
EndProcedure
Procedure.i xlSheetSetTopLeftView(sheet.i, row.i, col.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetTopLeftViewW", sheet, row, col)
EndProcedure
Procedure.i xlSheetRightToLeft(sheet.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRightToLeftW", sheet)
EndProcedure
Procedure.i xlSheetSetRightToLeft(sheet.i, rightToLeft.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetSetRightToLeftW", sheet, rightToLeft)
EndProcedure
Procedure.i xlSheetAddrToRowCol(sheet.i, addr_.s, row.i, col.i, rowRelative.i, colRelative.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetAddrToRowColW", sheet, @addr_, row, col, rowRelative, colRelative)
EndProcedure
Procedure.l xlSheetRowColToAddr(sheet.i, row.i, col.i, rowRelative.i, colRelative.i)
  ProcedureReturn CallCFunction(libXLid, "xlSheetRowColToAddrW", sheet, row, col, rowRelative, colRelative)
EndProcedure
;-
;- ========================
;- Format function declarations
;- ========================
Procedure.i xlFormatFont(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatFontW", format)
EndProcedure
Procedure.i xlFormatSetFont(format.i, font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetFontW", format, font)
EndProcedure
Procedure.i xlFormatNumFormat(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatNumFormatW", format)
EndProcedure
Procedure.i xlFormatSetNumFormat(format.i, numFormat.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetNumFormatW", format, numFormat)
EndProcedure
Procedure.i xlFormatAlignH(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatAlignHW", format)
EndProcedure
Procedure.i xlFormatSetAlignH(format.i, align.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetAlignHW", format, align)
EndProcedure
Procedure.i xlFormatAlignV(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatAlignVW", format)
EndProcedure
Procedure.i xlFormatSetAlignV(format.i, align.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetAlignVW", format, align)
EndProcedure
Procedure.i xlFormatWrap(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatWrapW", format)
EndProcedure
Procedure.i xlFormatSetWrap(format.i, wrap.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetWrapW", format, wrap)
EndProcedure
Procedure.i xlFormatRotation(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatRotationW", format)
EndProcedure
Procedure.i xlFormatSetRotation(format.i, rotation.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetRotationW", format, rotation)
EndProcedure
Procedure.i xlFormatIndent(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatIndentW", format)
EndProcedure
Procedure.i xlFormatSetIndent(format.i, indent.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetIndentW", format, indent)
EndProcedure
Procedure.i xlFormatShrinkToFit(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatShrinkToFitW", format)
EndProcedure
Procedure.i xlFormatSetShrinkToFit(format.i, shrinkToFit.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetShrinkToFitW", format, shrinkToFit)
EndProcedure
Procedure.i xlFormatSetBorder(format.i, style.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderW", format, style)
EndProcedure
Procedure.i xlFormatSetBorderColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderLeft(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderLeftW", format)
EndProcedure
Procedure.i xlFormatSetBorderLeft(format.i, style.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderLeftW", format, style)
EndProcedure
Procedure.i xlFormatBorderRight(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderRightW", format)
EndProcedure
Procedure.i xlFormatSetBorderRight(format.i, style.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderRightW", format, style)
EndProcedure
Procedure.i xlFormatBorderTop(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderTopW", format)
EndProcedure
Procedure.i xlFormatSetBorderTop(format.i, style.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderTopW", format, style)
EndProcedure
Procedure.i xlFormatBorderBottom(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderBottomW", format)
EndProcedure
Procedure.i xlFormatSetBorderBottom(format.i, style.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderBottomW", format, style)
EndProcedure
Procedure.i xlFormatBorderLeftColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderLeftColorW", format)
EndProcedure
Procedure.i xlFormatSetBorderLeftColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderLeftColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderRightColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderRightColorW", format)
EndProcedure
Procedure.i xlFormatSetBorderRightColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderRightColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderTopColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderTopColorW", format)
EndProcedure
Procedure.i xlFormatSetBorderTopColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderTopColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderBottomColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderBottomColorW", format)
EndProcedure
Procedure.i xlFormatSetBorderBottomColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderBottomColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderDiagonal(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderDiagonalW", format)
EndProcedure
Procedure.i xlFormatSetBorderDiagonal(format.i, border.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderDiagonalW", format, border)
EndProcedure
Procedure.i xlFormatSetBorderDiagonalColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderDiagonalColorW", format, color)
EndProcedure
Procedure.i xlFormatBorderDiagonalStyle(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatBorderDiagonalStyleW", format)
EndProcedure
Procedure.i xlFormatSetBorderDiagonalStyle(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetBorderDiagonalStyleW", format, color)
EndProcedure
Procedure.i xlFormatFillPattern(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatFillPatternW", format)
EndProcedure
Procedure.i xlFormatSetFillPattern(format.i, pattern.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetFillPatternW", format, pattern)
EndProcedure
Procedure.i xlFormatPatternForegroundColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatPatternForegroundColorW", format)
EndProcedure
Procedure.i xlFormatSetPatternForegroundColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetPatternForegroundColorW", format, color)
EndProcedure
Procedure.i xlFormatPatternBackgroundColor(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatPatternBackgroundColorW", format)
EndProcedure
Procedure.i xlFormatSetPatternBackgroundColor(format.i, color.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetPatternBackgroundColorW", format, color)
EndProcedure
Procedure.i xlFormatLocked(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatLockedW", format)
EndProcedure
Procedure.i xlFormatSetLocked(format.i, locked.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetLockedW", format, locked)
EndProcedure
Procedure.i xlFormatHidden(format.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatHiddenW", format)
EndProcedure
Procedure.i xlFormatSetHidden(format.i, hidden.i)
  ProcedureReturn CallCFunction(libXLid, "xlFormatSetHiddenW", format, hidden)
EndProcedure
;-
;- ========================
;- Format function declarations
;- ========================
Procedure.i xlFontSize(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSizeW", font)
EndProcedure
Procedure.i xlFontSetSize(font.i, fontsize.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetSizeW", font, fontsize)
EndProcedure
Procedure.i xlFontItalic(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontItalicW", font)
EndProcedure
Procedure.i xlFontSetItalic(font.i, italic.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetItalicW", font, italic)
EndProcedure
Procedure.i xlFontStrikeOut(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontStrikeOutW", font)
EndProcedure
Procedure.i xlFontSetStrikeOut(font.i, strikeOut.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetStrikeOutW", font, strikeOut)
EndProcedure
Procedure.i xlFontColor(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontColorW", font)
EndProcedure
Procedure.i xlFontSetColor(font.i, fColor.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetColorW", font, fColor)
EndProcedure
Procedure.i xlFontBold(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontBoldW", font)
EndProcedure
Procedure.i xlFontSetBold(font.i, bold.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetBoldW", font, bold)
EndProcedure
Procedure.i xlFontScript(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontScriptW", font)
EndProcedure
Procedure.i xlFontSetScript(font.i, script.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetScriptW", font, script)
EndProcedure
Procedure.i xlFontUnderline(font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontUnderlineW", font)
EndProcedure
Procedure.i xlFontSetUnderline(font.i, underline.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetUnderlineW", font, underline)
EndProcedure
Procedure.l xlFontName(Font.i)
  ProcedureReturn CallCFunction(libXLid, "xlFontNameW", Font)
EndProcedure
Procedure.i xlFontSetName(font.i, fontName.s)
  ProcedureReturn CallCFunction(libXLid, "xlFontSetNameW", font, @fontName)
EndProcedure
[/size]

libXL_enum.pbi

Code: Select all

; Macro BookHandle   = DWORD
; Macro SheetHandle  = DWORD
; Macro FormatHandle = DWORD
; Macro FontHandle   = DWORD

Enumeration ;COLOR
   #COLOR_BLACK = 8
   #COLOR_WHITE
   #COLOR_RED
   #COLOR_BRIGHTGREEN
   #COLOR_BLUE
   #COLOR_YELLOW
   #COLOR_PINK
   #COLOR_TURQUOISE
   #COLOR_DARKRED
   #COLOR_GREEN
   #COLOR_DARKBLUE
   #COLOR_DARKYELLOW
   #COLOR_VIOLET
   #COLOR_TEAL
   #COLOR_GRAY25
   #COLOR_GRAY50
   #COLOR_PERIWINKLE_CF
   #COLOR_PLUM_CF
   #COLOR_IVORY_CF
   #COLOR_LIGHTTURQUOISE_CF
   #COLOR_DARKPURPLE_CF
   #COLOR_CORAL_CF
   #COLOR_OCEANBLUE_CF
   #COLOR_ICEBLUE_CF
   #COLOR_DARKBLUE_CL
   #COLOR_PINK_CL
   #COLOR_YELLOW_CL
   #COLOR_TURQUOISE_CL
   #COLOR_VIOLET_CL
   #COLOR_DARKRED_CL
   #COLOR_TEAL_CL
   #COLOR_BLUE_CL
   #COLOR_SKYBLUE
   #COLOR_LIGHTTURQUOISE
   #COLOR_LIGHTGREEN
   #COLOR_LIGHTYELLOW
   #COLOR_PALEBLUE
   #COLOR_ROSE
   #COLOR_LAVENDER
   #COLOR_TAN
   #COLOR_LIGHTBLUE
   #COLOR_AQUA
   #COLOR_LIME
   #COLOR_GOLD
   #COLOR_LIGHTORANGE
   #COLOR_ORANGE
   #COLOR_BLUEGRAY
   #COLOR_GRAY40
   #COLOR_DARKTEAL
   #COLOR_SEAGREEN
   #COLOR_DARKGREEN
   #COLOR_OLIVEGREEN
   #COLOR_BROWN
   #COLOR_PLUM
   #COLOR_INDIGO
   #COLOR_GRAY80
   #COLOR_DEFAULT_FOREGROUND = 64    ;0x0040
   #COLOR_DEFAULT_BACKGROUND = 65    ;0x0041
   #COLOR_TOOLTIP            = 81    ;0x0051
   #COLOR_AUTO               = 32767 ;0x7FFF
EndEnumeration

Enumeration ;NumFormat
    #NUMFORMAT_GENERAL
    #NUMFORMAT_NUMBER
    #NUMFORMAT_NUMBER_D2
    #NUMFORMAT_NUMBER_SEP
    #NUMFORMAT_NUMBER_SEP_D2
    #NUMFORMAT_CURRENCY_NEGBRA
    #NUMFORMAT_CURRENCY_NEGBRARED
    #NUMFORMAT_CURRENCY_D2_NEGBRA
    #NUMFORMAT_CURRENCY_D2_NEGBRARED
    #NUMFORMAT_PERCENT
    #NUMFORMAT_PERCENT_D2
    #NUMFORMAT_SCIENTIFIC_D2
    #NUMFORMAT_FRACTION_ONEDIG
    #NUMFORMAT_FRACTION_TWODIG
    #NUMFORMAT_DATE
    #NUMFORMAT_CUSTOM_D_MON_YY
    #NUMFORMAT_CUSTOM_D_MON
    #NUMFORMAT_CUSTOM_MON_YY
    #NUMFORMAT_CUSTOM_HMM_AM
    #NUMFORMAT_CUSTOM_HMMSS_AM
    #NUMFORMAT_CUSTOM_HMM
    #NUMFORMAT_CUSTOM_HMMSS
    #NUMFORMAT_CUSTOM_MDYYYY_HMM
    #NUMFORMAT_NUMBER_SEP_NEGBRA = 37
    #NUMFORMAT_NUMBER_SEP_NEGBRARED
    #NUMFORMAT_NUMBER_D2_SEP_NEGBRA
    #NUMFORMAT_NUMBER_D2_SEP_NEGBRARED
    #NUMFORMAT_ACCOUNT
    #NUMFORMAT_ACCOUNTCUR
    #NUMFORMAT_ACCOUNT_D2
    #NUMFORMAT_ACCOUNT_D2_CUR
    #NUMFORMAT_CUSTOM_MMSS
    #NUMFORMAT_CUSTOM_H0MMSS
    #NUMFORMAT_CUSTOM_MMSS0
    #NUMFORMAT_CUSTOM_000P0E_PLUS0
    #NUMFORMAT_TEXT
EndEnumeration

Enumeration ; AlignH
    #ALIGNH_GENERAL
    #ALIGNH_LEFT
    #ALIGNH_CENTER
    #ALIGNH_RIGHT
    #ALIGNH_FILL
    #ALIGNH_JUSTIFY
    #ALIGNH_MERGE
    #ALIGNH_DISTRIBUTED
EndEnumeration

Enumeration ;AlignV
    #ALIGNV_TOP
    #ALIGNV_CENTER
    #ALIGNV_BOTTOM
    #ALIGNV_JUSTIFY
    #ALIGNV_DISTRIBUTED
EndEnumeration

Enumeration ;BorderStyle
    #BORDERSTYLE_NONE
    #BORDERSTYLE_THIN
    #BORDERSTYLE_MEDIUM
    #BORDERSTYLE_DASHED
    #BORDERSTYLE_DOTTED
    #BORDERSTYLE_THICK
    #BORDERSTYLE_DOUBLE
    #BORDERSTYLE_HAIR
    #BORDERSTYLE_MEDIUMDASHED
    #BORDERSTYLE_DASHDOT
    #BORDERSTYLE_MEDIUMDASHDOT
    #BORDERSTYLE_DASHDOTDOT
    #BORDERSTYLE_MEDIUMDASHDOTDOT
    #BORDERSTYLE_SLANTDASHDOT
EndEnumeration

Enumeration ;BorderDiagonal
    #BORDERDIAGONAL_NONE
    #BORDERDIAGONAL_DOWN
    #BORDERDIAGONAL_UP
    #BORDERDIAGONAL_BOTH
EndEnumeration

Enumeration ;FillPattern
    #FILLPATTERN_NONE
    #FILLPATTERN_SOLID
    #FILLPATTERN_GRAY50
    #FILLPATTERN_GRAY75
    #FILLPATTERN_GRAY25
    #FILLPATTERN_HORSTRIPE
    #FILLPATTERN_VERSTRIPE
    #FILLPATTERN_REVDIAGSTRIPE
    #FILLPATTERN_DIAGSTRIPE
    #FILLPATTERN_DIAGCROSSHATCH
    #FILLPATTERN_THICKDIAGCROSSHATCH
    #FILLPATTERN_THINHORSTRIPE
    #FILLPATTERN_THINVERSTRIPE
    #FILLPATTERN_THINREVDIAGSTRIPE
    #FILLPATTERN_THINDIAGSTRIPE
    #FILLPATTERN_THINHORCROSSHATCH
    #FILLPATTERN_THINDIAGCROSSHATCH
    #FILLPATTERN_GRAY12P5
    #FILLPATTERN_GRAY6P25
EndEnumeration

Enumeration ;Script
    #SCRIPT_NORMAL
    #SCRIPT_SUPER
    #SCRIPT_SUB
EndEnumeration

Enumeration ;Underline
    #UNDERLINE_NONE
    #UNDERLINE_SINGLE
    #UNDERLINE_DOUBLE
    #UNDERLINE_SINGLEACC = 33
    #UNDERLINE_DOUBLEACC = 34
EndEnumeration

Enumeration ;SheetType
    #SHEETTYPE_SHEET
    #SHEETTYPE_CHART
    #SHEETTYPE_UNKNOWN
EndEnumeration

Enumeration ;CellType
    #CELLTYPE_EMPTY
    #CELLTYPE_NUMBER
    #CELLTYPE_STRING
    #CELLTYPE_BOOLEAN
    #CELLTYPE_BLANK
    #CELLTYPE_ERROR
EndEnumeration

;ErrorType
     #ERRORTYPE_NULL    = 0
     #ERRORTYPE_DIV_0   = 7
     #ERRORTYPE_VALUE   = 15
     #ERRORTYPE_REF    = 23
     #ERRORTYPE_NAME    = 29
     #ERRORTYPE_NUM    = 36
     #ERRORTYPE_NA      = 42
     #ERRORTYPE_NOERROR = 255


Enumeration ;PictureType
     #PICTURETYPE_PNG
     #PICTURETYPE_JPEG
     #PICTURETYPE_WMF
     #PICTURETYPE_DIB
     #PICTURETYPE_EMF
     #PICTURETYPE_PICT
     #PICTURETYPE_TIFF
     #PICTURETYPE_ERROR = 255
EndEnumeration

Enumeration ;SheetState
    #SHEETSTATE_VISIBLE
    #SHEETSTATE_HIDDEN
    #SHEETSTATE_VERYHIDDEN
EndEnumeration

;Scope
    #SCOPE_UNDEFINED = -2
    #SCOPE_WORKBOOK  = -1


Enumeration ;PAPER
    #PAPER_DEFAULT
    #PAPER_LETTER
    #PAPER_LETTERSMALL
    #PAPER_TABLOID
    #PAPER_LEDGER
    #PAPER_LEGAL
    #PAPER_STATEMENT
    #PAPER_EXECUTIVE
    #PAPER_A3
    #PAPER_A4
    #PAPER_A4SMALL
    #PAPER_A5
    #PAPER_B4
    #PAPER_B5
    #PAPER_FOLIO
    #PAPER_QUATRO
    #PAPER_10x14
    #PAPER_10x17
    #PAPER_NOTE
    #PAPER_ENVELOPE_9
    #PAPER_ENVELOPE_10
    #PAPER_ENVELOPE_11
    #PAPER_ENVELOPE_12
    #PAPER_ENVELOPE_14
    #PAPER_C_SIZE
    #PAPER_D_SIZE
    #PAPER_E_SIZE
    #PAPER_ENVELOPE_DL
    #PAPER_ENVELOPE_C5
    #PAPER_ENVELOPE_C3
    #PAPER_ENVELOPE_C4
    #PAPER_ENVELOPE_C6
    #PAPER_ENVELOPE_C65
    #PAPER_ENVELOPE_B4
    #PAPER_ENVELOPE_B5
    #PAPER_ENVELOPE_B6
    #PAPER_ENVELOPE
    #PAPER_ENVELOPE_MONARCH
    #PAPER_US_ENVELOPE
    #PAPER_FANFOLD
    #PAPER_GERMAN_STD_FANFOLD
    #PAPER_GERMAN_LEGAL_FANFOLD
    #PAPER_B4_ISO
    #PAPER_JAPANESE_POSTCARD
    #PAPER_9x11
    #PAPER_10x11
    #PAPER_15x11
    #PAPER_ENVELOPE_INVITE
    #PAPER_US_LETTER_EXTRA = 50
    #PAPER_US_LEGAL_EXTRA
    #PAPER_US_TABLOID_EXTRA
    #PAPER_A4_EXTRA
    #PAPER_LETTER_TRANSVERSE
    #PAPER_A4_TRANSVERSE
    #PAPER_LETTER_EXTRA_TRANSVERSE
    #PAPER_SUPERA
    #PAPER_SUPERB
    #PAPER_US_LETTER_PLUS
    #PAPER_A4_PLUS
    #PAPER_A5_TRANSVERSE
    #PAPER_B5_TRANSVERSE
    #PAPER_A3_EXTRA
    #PAPER_A5_EXTRA
    #PAPER_B5_EXTRA
    #PAPER_A2
    #PAPER_A3_TRANSVERSE
    #PAPER_A3_EXTRA_TRANSVERSE
    #PAPER_JAPANESE_DOUBLE_POSTCARD
    #PAPER_A6
    #PAPER_JAPANESE_ENVELOPE_KAKU2
    #PAPER_JAPANESE_ENVELOPE_KAKU3
    #PAPER_JAPANESE_ENVELOPE_CHOU3
    #PAPER_JAPANESE_ENVELOPE_CHOU4
    #PAPER_LETTER_ROTATED
    #PAPER_A3_ROTATED
    #PAPER_A4_ROTATED
    #PAPER_A5_ROTATED
    #PAPER_B4_ROTATED
    #PAPER_B5_ROTATED
    #PAPER_JAPANESE_POSTCARD_ROTATED
    #PAPER_DOUBLE_JAPANESE_POSTCARD_ROTATED
    #PAPER_A6_ROTATED
    #PAPER_JAPANESE_ENVELOPE_KAKU2_ROTATED
    #PAPER_JAPANESE_ENVELOPE_KAKU3_ROTATED
    #PAPER_JAPANESE_ENVELOPE_CHOU3_ROTATED
    #PAPER_JAPANESE_ENVELOPE_CHOU4_ROTATED
    #PAPER_B6
    #PAPER_B6_ROTATED
    #PAPER_12x11
    #PAPER_JAPANESE_ENVELOPE_YOU4
    #PAPER_JAPANESE_ENVELOPE_YOU4_ROTATED
    #PAPER_PRC16K
    #PAPER_PRC32K
    #PAPER_PRC32K_BIG
    #PAPER_PRC_ENVELOPE1
    #PAPER_PRC_ENVELOPE2
    #PAPER_PRC_ENVELOPE3
    #PAPER_PRC_ENVELOPE4
    #PAPER_PRC_ENVELOPE5
    #PAPER_PRC_ENVELOPE6
    #PAPER_PRC_ENVELOPE7
    #PAPER_PRC_ENVELOPE8
    #PAPER_PRC_ENVELOPE9
    #PAPER_PRC_ENVELOPE10
    #PAPER_PRC16K_ROTATED
    #PAPER_PRC32K_ROTATED
    #PAPER_PRC32KBIG_ROTATED
    #PAPER_PRC_ENVELOPE1_ROTATED
    #PAPER_PRC_ENVELOPE2_ROTATED
    #PAPER_PRC_ENVELOPE3_ROTATED
    #PAPER_PRC_ENVELOPE4_ROTATED
    #PAPER_PRC_ENVELOPE5_ROTATED
    #PAPER_PRC_ENVELOPE6_ROTATED
    #PAPER_PRC_ENVELOPE7_ROTATED
    #PAPER_PRC_ENVELOPE8_ROTATED
    #PAPER_PRC_ENVELOPE9_ROTATED
    #PAPER_PRC_ENVELOPE10_ROTATED
EndEnumeration

;EnhancedProtection
    #PROT_DEFAULT = -1
    #PROT_ALL = 0
    #PROT_OBJECTS = 1
    #PROT_SCENARIOS = 2
    #PROT_FORMAT_CELLS = 4
    #PROT_FORMAT_COLUMNS = 8
    #PROT_FORMAT_ROWS = 16
    #PROT_INSERT_COLUMNS = 32
    #PROT_INSERT_ROWS = 64
    #PROT_INSERT_HYPERLINKS = 128
    #PROT_DELETE_COLUMNS = 256
    #PROT_DELETE_ROWS = 512
    #PROT_SEL_LOCKED_CELLS = 1024
    #PROT_SORT = 2048
    #PROT_AUTOFILTER = 4096
    #PROT_PIVOTTABLES = 8192
    #PROT_SEL_UNLOCKED_CELLS = 16384
[/size]
PB 6.21 beta, PureVision User
Post Reply