Is there any way to create an Excel file programmatically in iOS?
2 Answers
This is a strip down version of XML representation of XLS file, Just create an raw XML like this...and save it as XLS.
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Version>14.0</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>11720</WindowHeight>
<WindowWidth>25600</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>0</WindowTopY>
<TabRatio>600</TabRatio>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:Color="#000000"/>
<NumberFormat/>
</Style>
<Style ss:ID="s62">
<Interior/>
<Protection/>
</Style>
<Style ss:ID="s63">
<Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
<Protection/>
</Style>
</Styles>
<Worksheet ss:Name="Apple Inc">
<Table x:FullColumns="1"
x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="53"
ss:DefaultRowHeight="12">
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="90"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="180"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="60" ss:Span="5"/>
<Column ss:Index="9" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="48"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="60"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="48"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="90" ss:Span="1"/>
<Column ss:Index="14" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="300"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="55" ss:Span="1"/>
<Row ss:AutoFitHeight="0" ss:Height="20">
<Cell ss:StyleID="s63"><Data ss:Type="String">Room</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Description</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">level</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">level</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">level</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">level</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Date</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Audit</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Risk</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Value</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Score</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">ScoreName</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Action</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Comments</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Test</Data></Cell>
<Cell ss:StyleID="s63"><Data ss:Type="String">Test</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="Number">data value</Data></Cell>
<Cell><Data ss:Type="Number">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">data value</Data></Cell>
<Cell><Data ss:Type="String">Vau</Data></Cell>
<Cell><Data ss:Type="String">Test</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Print>
<ValidPrinterInfo/>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<PageLayoutZoom>0</PageLayoutZoom>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>15</ActiveRow>
<ActiveCol>13</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
<AllowFormatCells/>
<AllowSizeCols/>
<AllowSizeRows/>
<AllowInsertCols/>
<AllowInsertRows/>
<AllowInsertHyperlinks/>
<AllowDeleteCols/>
<AllowDeleteRows/>
<AllowSort/>
<AllowFilter/>
<AllowUsePivotTables/>
</WorksheetOptions>
</Worksheet>
</Workbook>
You will be able to create different styles too,
<Style ss:ID="s63">
<Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
<Protection/>
</Style>
3 Comments
TheYellowSquares
This unfortunately appears to fail to open properly in execl 2016
TheYellowSquares
Correction, it will work but you need to revise the data cells with a number data type to be a string data type, or change "data value" to a number in those fields.
TheYellowSquares
Third update, .xls will cause you to get a warning message when excel opens, use the following line in the XML document below the xml version "<?mso-application progid="Excel.Sheet"?>" and save the file as .xml so that does not end up happening. For reference, this is known as the office 2003 xml format.
You could look at Creating Excel (.xlsx) files in Cocoa
If the data you need to save is simple you could also just save it as .CVS file instead http://en.wikipedia.org/wiki/Comma-separated_values