Как избежать быдлокода или как отрефакторить это?
Как минимум вынести всю экселвскую хрень куда-нибудь. 
Выделить повторяющиеся куски (см getLabelsOnly и getLabels)
У вас модель AR.
Сразу понятно, что кусок, отвечающий за формирование Excel вообще не к месту.
Дальше видно, что есть "жирные" методы с кучей if-then-else, простирающиеся не на 1 экран. Это тоже намек на рефакторинг. Для начала попробовать делать refactor->extract (в Phpstorm), чтобы сделать код более читаемым. Дальше возможно станет ясно потребуются ли новые классы под какие-нибудь сущности. 
В логику кода не вникал особо.