Excel::Template was built for this exact purpose. It has the same API as HTML::Template (and PDF::Template, for that matter) and will gladly provide either a file or a buffer for CGI.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?