in reply to Spreadsheet::XLSX returning < > and & instead of < > &
Spreadsheet::XLSX (as found in http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.13-withoutworldwriteables/lib/Spreadsheet/XLSX.pm) does not use an XML parser, but instead it messes with regular expressions. The code looks quite scary and seems to be very optimistic about the file format.
Perhaps you should look for a different module, or rewrite Spreadsheet::XLSX using a sane XML parser, like XML::LibXML.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)