8 hrs on from when I posted this, I've found a solution so if anyone else encounters the problem the solution is "YES" - you will need to re-write your agent(s) however it wasn't as bad as I thought. I've used spreadsheetML to export the data. Its slightly different to the raw html I was outputting but if your code is structured well enough you can use a find replace to replace your html columns with spreadsheetML cells etc...
Print |Content-Type:application/vnd.ms-excel|
Print |Content-Disposition:Attachment; filename=Report.xls|
Print |<?xml version="1.0" encoding="UTF-8"?>|
Print |<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office">
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>10680</WindowHeight>
<WindowWidth>19740</WindowWidth>
<WindowTopX>-6015</WindowTopX>
<WindowTopY>315</WindowTopY>
<TabRatio>721</TabRatio>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>|
Print |<Styles>
<Style ss:ID="normalCell">
<Alignment ss:Vertical="Bottom" ss:WrapText="1"/>
<Font ss:Color="#000000" ss:FontName="Arial" ss:Size="9" x:Family="Swiss"/>
</Style>
<Style ss:ID="headerCell" ss:Parent="normalCell">
<Font ss:Bold="1" ss:Color="#000000" ss:FontName="Arial" ss:Size="9" x:Family="Swiss"/>
</Style>
</Styles>|
Print |<Worksheet ss:Name="| + worksheetName + |">|
Print |<Table>| + _
|<Column ss:Width="| + CStr(colWidth) + |"></Column>|
For x = 0 To UBound(dataStr,1)
Print |<Row>
For y = 0 To UBound(dataStr)
Print |<Cell | + headerClass + |>| + _
|<Data ss:Type="String">| + dataStr(y)+ |</Data>| + _
|</Cell>|
Next
Print |</Row>|
Next
Print |</Table>|
Print |</Worksheet>|
Print |</Workbook>|
Hope this helps