I, for one, would seriously consider doing the work in Excel, using, say, a VB script within one or the other spreadsheet. Let it open up a new Excel.Workbook object (perhaps a template with various named cell-ranges assigned for this purpose ...), and iterate through it to populate the data from one to the other. It is usually a good idea to use named cell-ranges in the source data, too, and I would gamble that your source spreadsheet is already doing this. (Code that refers to cells by their coordinates is fragile, not “future-proof.”)
While Perl does, as already mentioned, provide support-packages for dealing with this file format, “Excel is fully-programmable, too, and Excel knows herself best-of-all.” So, that’s how I would do it, have done it, and would frankly recommend doing it.