I don't like this, but PyPI makes it really, really hard to "discover"
optional deps and what they're used for. So it's just easier to make it
a mandatory dependency and advanced users can always strip it out. This
stops user reports about "it doesn't work out of the box I only did pip
install ifctester"
The issue was related to the sheet names - Excel prohibits some symbols in the names and it doesn't allow sheet name to be longer than 31 symbols. If sheet names doesn't match this criteria then Excel says file appears to be corrupted - when file open data itself is not really corrupted besides the spreadsheet names that failed the criteria.
* String building code all deleted and replaced with more maintainable code
* Obscure features like metaclasses deleted
* Regular constructors used instead of factory create and parse methods
* Use Python class naming convention
* Use polymorphism more (e.g. asdict, init) for facet classes
* No more boolean any/and as users may want to test everything and not fail early
* Error state is stored instead of streamed to logger so it can be tested and more flexible formatting