|Do you know where your variables are?|
This is a very fair assessment of both modules. ++
In general I'd say that Win32::OLE's biggest drawback is the fact that it moves the programmer from Perl space to COM space. While that isn't a problem if you are comfortable with COM or VBA the monolithic API is potentially daunting for a programmer who primarily uses Perl.
I feel that Win32::OLE is let down in this respect by a lack of documentation. A cookbook style document in the Pod would go a long way to getting people started.
Notwithstanding these points, Win32::OLE is really a killer app. On a Windows system it gives you almost unlimited control over COM based applications.
As such, the Spreadsheet::WriteExcel documentation has always recommended Win32::OLE as an alternative. Like all modules Spreadsheet::WriteExcel is only useful if it does what you want it to to. However, if you have requirements for charts, filters, macros or pivot tables then you are stuck. This is not the case with Win32::OLE. It is, and always will be, able to access virtually every Excel feature that the user can access.
Spreadsheet::WriteExcel's strengths are that it is cross platform, heavily tested and comparatively fast and lightweight.