Spreadsheet::ParseExcel is pretty solid, and if Excel is what works for data entry, it'll do a fine job of parsing the data. It's not the fastest routine in the world -- it's doing quite a lot -- so as I reckon a schedule would probably change less often that your site would get page views, caching the result based on file modification time would be good.
I wonder if The Bay (a huge department store chain in Canada) is still using my Spreadsheet::ParseExcel code to generate all their product and price signage? It was pretty cool, but the output format (Quark Tags) wasn't.
--
bowling trophy thieves, die!