Вы можете попробовать архитектуру ETL (extract-transform-load):
Extract: один класс откроет файл и получит все данные в кусках, с которыми вы знаете, как работать (обычно вы берете одинстрока из файла и синтаксический анализ его данных в объект POCO, содержащий поля, которые содержат соответствующие данные), и помещают их в очередь, из которой могут работать другие рабочие процессы.В этом случае, возможно, первое, что вы сделаете, - это откроете файл в Excel и повторно сохраните его в формате CSV, чтобы вы могли снова открыть его как основной текст в вашем процессе и эффективно его нарезать.Вы также можете прочитать имена столбцов и создать «словарь сопоставления»;этот столбец называется так, поэтому он переходит к этому свойству объекта данных.Этот процесс должен происходить как можно быстрее, и единственная причина, по которой он должен потерпеть неудачу, состоит в том, что формат строки не соответствует тому, что вы ищете, учитывая структуру файла.
Преобразование: после извлечения содержимого файла в экземпляр базовой строки выполните любые проверки, вычисления или другие бизнес-правила, необходимые для превращения строки из файла в набор объектов домена, соответствующих вашемудоменная модель.Этот процесс может быть настолько сложным, насколько вам нужно, но, опять же, он должен быть настолько простым, насколько это возможно, при соблюдении всех бизнес-правил, указанных в ваших требованиях.
Загрузка: Теперь у вас естьГраф объектов в ваших собственных объектах домена, вы можете использовать ту же среду хранения, которую вы вызываете для обработки объектов домена, созданных любым другим способом.Это может быть базовый ADO, ORM, такой как NHibernate или MSEF, или шаблон Active Record, где объекты знают, как сохранить себя.Это не массовая загрузка, но избавляет вас от необходимости реализовывать совершенно другую модель персистентности только для того, чтобы загружать данные из файлов в БД.
Рабочий процесс ETL может помочь вам разделить повторяющиеся задачи на простые единицы работы,и оттуда вы можете определить задачи, которые занимают много времени, и рассмотреть параллельные процессы.
Кроме того, вы можете взять файл и поменять его формат, обнаружив столбцы, с которыми вы хотите работать, и расположив их в формате, который соответствует вашей спецификации массового ввода, прежде чем вызывать процедуру массовой вставки для обработки данных.Эта подпрограмма файлового процессора может делать все что угодно, включая разделение данных на несколько файлов.Однако это один большой процесс, который работает с целым файлом за раз и имеет ограниченные возможности для оптимизации или параллельной обработки.Однако, если ваш механизм загрузки медленный, или у вас есть МНОГО данных, которые легко переварить, это может закончиться быстрее, чем даже хорошо спроектированный ETL.
В любом случае, я бы получилкак можно скорее переместиться из формата Office в простой текстовый (или XML) формат, и я бы ОПРЕДЕЛЕННО избегал устанавливать Office на сервер.Если есть ЛЮБОЙ способ, которым вы можете потребовать, чтобы файлы были в каком-то легко разбираемом формате, таком как CSV, ДО того, как они будут загружены, тем лучше.В целом установка Office на сервере - это действительно плохо, и OLE-операции в серверном приложении не намного лучше.Приложение будет очень хрупким, и все, что скажет Office, заставит приложение зависать до тех пор, пока вы не войдете на сервер и не очистите диалоговое окно.