PureXLS Library

Windows specific forum
nerk64
New User
New User
Posts: 3
Joined: Sun Feb 16, 2020 11:05 am

PureXLS Library

Post by nerk64 »

Hi everyone
I have always used the PureXLS library to create files in Excel.
But with the PB 6.10 version it doesn't work, the excel file is generated empty.
Same source code as with PB 6.02 works.
Can anyone help me or point me to some libraries that work with version 6.10 to manage Excel files.
Thank you :mrgreen:
User avatar
jacdelad
Addict
Addict
Posts: 2004
Joined: Wed Feb 03, 2021 12:46 pm
Location: Riesa

Re: PureXLS Library

Post by jacdelad »

Some code would be nice. Also, this library is veeeeeery old and there are other, newer ones.
Good morning, that's a nice tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
nerk64
New User
New User
Posts: 3
Joined: Sun Feb 16, 2020 11:05 am

Re: PureXLS Library

Post by nerk64 »

I also attach the code for appreciated support

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

;#########################################################################
;- 
;- 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, ">") 
    PureXLS_WriteString(id, "<Data") 
    PureXLS_WriteString(id, PureXLS_Attribute("ss:Type", Type)) 
    PureXLS_WriteString(id, ">") 
    PureXLS_WriteString(id, Value) 
    PureXLS_WriteStringN(id, "</Data></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, ">")
    PureXLS_WriteString(id, "<Data")
    If *d
      PureXLS_WriteString(id, PureXLS_Attribute("ss:Type",  *d\Type))
      PureXLS_WriteString(id, PureXLS_Attribute("x:Ticked", *d\Ticked))
    EndIf
    PureXLS_WriteString(id, ">")
    PureXLS_WriteString(id, Value) 
    PureXLS_WriteStringN(id, "</Data></Cell>")
  EndIf
  
EndProcedure

;- 
;- END OF INCLUDE
;- 

DisableExplicit
Post Reply