It would be hard to say whether it would be faster or slower since you've given such a high-level description. However, I find that shell programming is *quite* a bit harder than perl. (In fact, one of the reasons I began coding in perl was to avoid shell scripts.)
If your spreadsheets are going to be large, you might consider Excel::Writer::XLSX instead of Spreadsheet::WriteExcel. The chief advantage is that it uses the .xlsx format which allows for more rows and columns in your spreadsheets.
What you're wanting to do looks like a perfect task for perl. In fact, just a couple of days ago I posted a script to create a spreadsheet from a database query.
When your only tool is a hammer, all problems look like your thumb.