Наш клиент получает файлы Excel в формате HTML Excel. (Так оно и есть; никто не может это контролировать.) Затем нам нужно запустить отчет на основе данных в файле. Использование ADO.NET (OleDbReader) приводит к исключению «Внешний файл не в ожидаемом формате».
Если данные преобразуются в обычный формат Excel, они считываются в ОК. Однако на самом деле это не решение, так как оно требует дополнительного шага, который они должны предпринять, и они не слишком хорошо разбираются в компьютерах в лучшие времена.
Единственное решение, которое я мог придумать, - это использовать Excel Automation для создания новой электронной таблицы, заполнить ее теми же данными и прочитать ее вместо этого. Но ADO.NET, кажется, может читать только из файла на диске. Конечно, я мог бы сохранить файл и удалить его, когда я закончу с ним (что я проверил, будет работать). Но мне не нравится идея возиться с их файловой системой. Итак, мой первый вопрос - есть ли способ заполнить DataTable из рабочей таблицы Excel в памяти?
Кроме того, мне не нравится весь бизнес с использованием автоматизации; это невероятно медленно Операция занимает более 30 секунд даже без заполнения DataTable. Так что решение, которое делает его медленнее, не принесет пользы. Это подводит меня ко второму вопросу: есть ли лучший способ выполнить то, что я здесь пытаюсь?