I don't think using Excel or Word macros would be a good idea in this case. It would introduce another component into the process -- an additional possible source of error and an additional part that you'd have to maintain.
The point about the compromise between the time to develop a fully automated process and the time spent using a not fully automated solution is a valid one - but in this case, a fully automated, simple solution is well within reach.
I'd say Spreadsheet::WriteExcel is the way to go and not Win32::OLE. The latter requires a working installation of Excel and for every manipulation with an Excel object it has to interact with a running instance of Excel - therefore it's slow and wastes resources.
On the other hand, S::WE creates the Excel table on the fly, independent from Excel. In other words, it does just what the OP needs.
It's great to get this such a task automated once and for all if the OP was going to have to generate this sort of report every other while. Excel alone can be fun to work with of course but not when you want to extend some of its capabilities. Now I don't know which of the modules can be better to work with, I have worked with Spreadsheet::WriteExcel sometime but I faced a problem of not being able to append to an excel file no matter how I tried...so if this is a known issue that should be a disadvantage.
Excellence is an Endeavor of Persistence.
Chance Favors a Prepared Mind.