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