Excel 2003 has a new output format called "XML Spreadsheet". I have had pretty good luck with generating this xml with PHP and then opening it up using excel. It's basically just using a template to generate "XML Spreadsheet" data instead of HTML.
I have also uses the PEAR package but by going through XML you avoid all the binary file format issues.