Why not use a simple database? The schema is already defined within the excel spreadsheet, and you'd get away from data integrity errors (your solution is not multi-user safe). And you would still be able to create the spreadsheet whenever necessary using something like Spreadsheet::WriteExcel. You already seem to be doing much of the work already; using a db would allow SQL to more efficiently update just the row that needed to be instead of chugging through the entire XML file each and every time.