Spreadsheet::WriteExcel only knows how to write spreadsheets -- not how to read them in. By opening the file in 'append' mode, you are simply catenating another complete spreadsheet file to your existing complete file. I guess excel does not care if there is extraneous data after the file. I think you want to:
- test if the file is present
- use Spreadsheet::ParseExcel to read it if it is there
- make your modifications, then use WriteExcel to write it