BUG: Delegate more of Excel parsing to CSV
State: closed

The idea is that we read the Excel file, get the data, and let the `TextParser` handle reading and parsing, or at least most of it.  We shouldn't be doing a lot of work that is already defined in `parsers.py`

In doing so, identified several bugs:

* `index_col=None` was not being respected

* `usecols` behavior was inconsistent with that of `read_csv` for list of strings and callable inputs

* `usecols` was not being validated as proper Excel column names when passed as a string.

Closes #18273.
Closes #20480.

With regards to the latter issue, I believe this PR is a cleaner implementation that integrates the new `usecols` functionality without having to introduce a new parameter.

Labels:
name: Bug
name: Enhancement
name: API Design
name: IO Excel
description: read_excel, to_excel

Comments:
Hello @gfyoung! Thanks for submitting the PR.

 - There are no PEP8 issues in the file [`pandas/io/excel.py`](https://github.com/gfyoung/pandas/blob/9be00cb7922cfa9f2c9ee64d50c17239f7930b03/pandas/io/excel.py) !

 - There are no PEP8 issues in the file [`pandas/tests/io/test_excel.py`](https://github.com/gfyoung/pandas/blob/9be00cb7922cfa9f2c9ee64d50c17239f7930b03/pandas/tests/io/test_excel.py) !


wow nice cleanup!

linting 

check import format using isort
ERROR: /home/travis/build/pandas-dev/pandas/pandas/io/excel.py Imports are incorrectly sorted.

# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=h1) Report
> Merging [#23544](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/2cea659a9a6a88d16e0d1fa698fb61dc6c3ce3d5?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/23544/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #23544      +/-   ##
==========================================
- Coverage   92.24%   92.23%   -0.01%     
==========================================
  Files         161      161              
  Lines       51278    51278              
==========================================
- Hits        47299    47298       -1     
- Misses       3979     3980       +1
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.62% <ø> (-0.01%)` | :arrow_down: |
| #single | `42.28% <ø> (ø)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/parsers.py](https://codecov.io/gh/pandas-dev/pandas/pull/23544/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL3BhcnNlcnMucHk=) | `95.55% <0%> (-0.07%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=footer). Last update [2cea659...a36aa76](https://codecov.io/gh/pandas-dev/pandas/pull/23544?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

@jreback : Fixed the import error, so ready for review.
@jreback : Addressed comments, and all is still green.  PTAL.
@jreback : Need to rebase this onto `master` because there are several places where `tm.assert_raises_regex` is used instead of `pyest.raises`.
@jreback : Comments addressed, PR rebased, and all is green.  PTAL.