Хорошо у меня есть записанный импорт Excel. Это использует автоматизацию Excel, чтобы пройти все записи и сделать задание. НО как Вы сделали бы это, если бы необходимо было сделать это?
Вы использовали бы SSIS? Вы использовали бы Dataconnection? Я действительно смущен относительно лучшего способа сделать это правильно. Так, чтобы это не замедляло реальное приложение для других клиентов, когда один клиент делает импорт.Спасибо
Подход, который я использовал в прошлом, заключается в чтении данных из таблиц Excel с помощью OleDb. В этой статье есть основы:
http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx
Это позволяет избежать необходимости использования автоматизации и оказалось довольно эффективным.
Это действительно зависит от требований - это для однократного импорта устаревших данных в новую систему, будут ли они использоваться на регулярной основе, каков объем данных, есть ли доступ к данным многократного использования и бизнес логический уровень для целевой базы данных - это файлы Excel уже в формате Open XML, так что можно использовать Open XML SDK, ...
Но для большого количества ситуаций я бы просто использовал соединение OLE DB для чтения из документ Excel и существующий уровень доступа к данным и бизнес-логики для записи в целевую базу данных.
Это зависит от многих вещей. Я работал над двумя довольно большими проектами, которые импортировали данные из Excel двумя очень разными способами, и у них были совершенно разные подходы, которые им подходили.
Этот проект включал ежедневную загрузку сотен файлов с очень хорошо определенным форматом данных в промежуточную базу данных, которая затем выполняла некоторый ETL для этих данных, чтобы принять их в хранилище данных (а затем витрина данных и кубы и т. д.)
Почему мы выбрали для этого SSIS:
В этом проекте использовалась существующая электронная таблица, которая уже использовалась для расчета множества финансовых показателей, включая макрос, который будет запускать ряд комбинаций сценариев, основанных на различных допущениях, определенных в таблицах , и вставил все это в базу данных SQL Server (где он прошел аналогичное путешествие DW -> DM -> cube).
Почему мы выбрали VSTO для этого:
Оба подхода работали одинаково хорошо, но имели разные причины для их выбора. Самым большим из них является гибкость формата / структуры данных, извлекаемых из Excel. Если он очень четко определен и устойчив, SSIS - это простой и не требующий вмешательства пользователя способ сделать это. Однако, если им нужно внести много изменений, то лучше всего подойдет платформа Office Interop (VSTO).
Я бы прочитал таблицу Excel в таблицу данных с помощью стороннего компонента. Я бы не рекомендовал использовать OLEDB и провайдер Excel, поскольку у меня было много проблем с Unicode при их использовании. Затем я бы использовал System.Data.SqlClient.SqlBulkCopy для сопоставления данных и массовой/вставленной в базу данных.
Если вы знаете, что таблица, в которую вы импортируете данные, доступна/заблокирована только для вашего приложения, вы можете настроить SqlBulkCopy на блокировку таблицы, что значительно повысит производительность; в моем случае до 12-15 раз!
Вы можете читать Excel непосредственно в вашей программе, используя ADO.NET. Посмотрите следующий код -
string fileName = "c:\myFileName.xls";
string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;
data source={0}; Extended Properties=Excel 8.0;", fileName);
// Create the data adapter pointing to the spreadsheet
var oa = new OleDbDataAdapter("SELECT * FROM [myWorkSheetName$]",
connectionString);
// Create a blank data set
var ds = new DataSet();
// Fill the data set using the adapter
oa.Fill(ds, "anything");
// Create a data table from the data set
DataTable dt = ds.Tables["anything"];
Затем вы можете манипулировать данными в таблице данных по своему усмотрению.