ENH Change ExcelFile to accept a workbook for the path_or_buf argument.
That will also mean that read_excel accepts workbooks too. (closes #4961 and #4959)

It might make sense to add an `engine` argument to both the `ExcelFile` and `read_excel` constructor that has to be passed along with a book...not sure.
 @jtratner It seems to make sense to add the engine argument, et. al. in another PR. Thoughts?
 @cancan101 I was thinking that we would require passing an engine argument with a book, so that, if we were to add other engines going forward, we wouldn't have to try isinstance checks for determining which backend to use.

So in other words you have `engine=None`, an if statement that checks for whatever conditions were previously checked for path_or_buf and then a final else clause that tells you that you have to specify an engine if not passing a buffer or path.  Not totally sure on that, but that's what I was thinking.
 @jtratner @cpcloud I pushed a change to test `read_excel` and renamed `path_or_buf`. I am still a little unclear on how to deal with an `engine` param for now. For the time being I can map both None and "xlrd" to go through the current code path and anything else to raise and error. Not sure how useful that is though.
 @cancan101 As different excel reading backends might have slightly different APIs for excel workbooks, then passing an `engine` should really be a requirement if you want to pass a workbook in as `io`. More clear? For example if I have an excel workbook that I've created using `openpyxl` (an instance of `Workbook`), that's different from the `Book` class used by `xlrd`. One would need a way to differentiate between those, and if I understand @jtratner then that's exactly what engine would do.
 yep, that's exactly what I mean (even though for right now it's all xlrd). Thanks for laying that out!
 @jtratner @cpcloud Okay. I pushed something for `engine` support. Let me know if this isn't right.
 I'll take a look soon.

On Wed, Sep 25, 2013 at 7:33 PM, Alex Rothberg notifications@github.comwrote:

> @jtratner https://github.com/jtratner @cpcloudhttps://github.com/cpcloudOkay. I pushed something for
> engine support. Let me know if this isn't right.
> 
> —
> Reply to this email directly or view it on GitHubhttps://github.com/pydata/pandas/pull/4962#issuecomment-25133440
> .
 ping!
 @cancan101 thanks for the ping. Apparently you need to rebase this too. (so sayeth github)
 @jtratner Pushed.
 after this passes Travis I'll merge.
