Импорт Excel, как Вы сделали бы это?

Хорошо у меня есть записанный импорт Excel. Это использует автоматизацию Excel, чтобы пройти все записи и сделать задание. НО как Вы сделали бы это, если бы необходимо было сделать это?

Вы использовали бы SSIS? Вы использовали бы Dataconnection? Я действительно смущен относительно лучшего способа сделать это правильно. Так, чтобы это не замедляло реальное приложение для других клиентов, когда один клиент делает импорт.Спасибо

1
задан Rico 17 May 2010 в 22:53
поделиться

5 ответов

Подход, который я использовал в прошлом, заключается в чтении данных из таблиц Excel с помощью OleDb. В этой статье есть основы:

http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

Это позволяет избежать необходимости использования автоматизации и оказалось довольно эффективным.

1
ответ дан 3 September 2019 в 00:29
поделиться

Это действительно зависит от требований - это для однократного импорта устаревших данных в новую систему, будут ли они использоваться на регулярной основе, каков объем данных, есть ли доступ к данным многократного использования и бизнес логический уровень для целевой базы данных - это файлы Excel уже в формате Open XML, так что можно использовать Open XML SDK, ...

Но для большого количества ситуаций я бы просто использовал соединение OLE DB для чтения из документ Excel и существующий уровень доступа к данным и бизнес-логики для записи в целевую базу данных.

0
ответ дан 3 September 2019 в 00:29
поделиться

Это зависит от многих вещей. Я работал над двумя довольно большими проектами, которые импортировали данные из Excel двумя очень разными способами, и у них были совершенно разные подходы, которые им подходили.

Импорт SSIS Excel

Этот проект включал ежедневную загрузку сотен файлов с очень хорошо определенным форматом данных в промежуточную базу данных, которая затем выполняла некоторый ETL для этих данных, чтобы принять их в хранилище данных (а затем витрина данных и кубы и т. д.)

Почему мы выбрали для этого SSIS:

  • остальную часть ETL имело смысл реализовать в SSIS, и это уменьшило сложность, будучи согласованным
  • определить схему для импорта Excel в SSIS было довольно просто, и, поскольку она была очень жесткой (правительство не регулировало), нам не нужно было беспокоиться об изменении итоговых пакетов с изменением схемы
  • , красиво развернутым на сервере служб Integration Services и может быть запущен с помощью заданий агента SQL

Пользовательское финансовое приложение с использованием VSTO для импорта

В этом проекте использовалась существующая электронная таблица, которая уже использовалась для расчета множества финансовых показателей, включая макрос, который будет запускать ряд комбинаций сценариев, основанных на различных допущениях, определенных в таблицах , и вставил все это в базу данных SQL Server (где он прошел аналогичное путешествие DW -> DM -> cube).

Почему мы выбрали VSTO для этого:

  • у нас было , чтобы использовать их модель электронной таблицы, и они хотели иметь возможность изменять эти вычисления по своему желанию без необходимости вносить изменения в код и без необходимости учиться программировать
  • , по сути,

Оба подхода работали одинаково хорошо, но имели разные причины для их выбора. Самым большим из них является гибкость формата / структуры данных, извлекаемых из Excel. Если он очень четко определен и устойчив, SSIS - это простой и не требующий вмешательства пользователя способ сделать это. Однако, если им нужно внести много изменений, то лучше всего подойдет платформа Office Interop (VSTO).

1
ответ дан 3 September 2019 в 00:29
поделиться

Я бы прочитал таблицу Excel в таблицу данных с помощью стороннего компонента. Я бы не рекомендовал использовать OLEDB и провайдер Excel, поскольку у меня было много проблем с Unicode при их использовании. Затем я бы использовал System.Data.SqlClient.SqlBulkCopy для сопоставления данных и массовой/вставленной в базу данных.

Если вы знаете, что таблица, в которую вы импортируете данные, доступна/заблокирована только для вашего приложения, вы можете настроить SqlBulkCopy на блокировку таблицы, что значительно повысит производительность; в моем случае до 12-15 раз!

0
ответ дан 3 September 2019 в 00:29
поделиться

Вы можете читать 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"]; 

Затем вы можете манипулировать данными в таблице данных по своему усмотрению.

0
ответ дан 3 September 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: