Извлечение данных из файла Excel и сохранение в базе данных SQL Server

1

Я ищу советы по наилучшему анализу файла Microsoft Excel и обновлению/хранению данных в данной базе данных SQL Server. Я использую ASP.NET MVC, поэтому планирую, что для просмотра страницы/представления в электронной таблице Excel и использования этого файла с данными пользователем мне нужно будет использовать С# для анализа данных из столбцов и обновления базы данных на основе совпадений с столбцом электронной таблицы который содержит ключевой столбец таблицы базы данных. Электронная таблица всегда будет в одном формате, поэтому мне нужно будет обрабатывать только формат. Похоже, это может быть довольно распространенной я просто ищу лучший способ приблизиться к этому, прежде чем начинать. Я использую Entity Framework в своем текущем приложении, но мне не нужно его использовать.

Я нашел это решение, похоже, что это может быть хорошим вариантом:

public IEnumerable<MyEntity> ReadEntitiesFromFile( IExcelDataReader reader, string filePath )
{
   var myEntities = new List<MyEntity>();
   var stream = File.Open( filePath, FileMode.Open, FileAccess.Read );

   using ( var reader = ExcelReaderFactory.CreateOpenXmlReader( stream ) )
   {
     while ( reader.Read() )
     {
        var myEntity = new MyEntity():
        myEntity.MyProperty1 = reader.GetString(1);
        myEntity.MyProperty2 = reader.GetInt32(2);

        myEntites.Add(myEntity);
      }
   }

   return myEntities;
}

Вот пример того, как может выглядеть файл (Clock # - это ключ)

Изображение 174551

Поэтому, учитывая файл в этом формате, я хочу совместить пользователя с записью таблицы данных с использованием часов # и обновлять запись с каждой из данных ячеек. Каждый столбец в электронной таблице имеет ссылочный столбец в таблице данных. Вся помощь очень ценится.

  • 0
    Проблема заключается в импорте этих данных или обработке данных после их импорта? Можете ли вы объяснить свою настоящую проблему?
  • 0
    Извините, проблема заключается в импорте данных. Я могу получить файл Excel и загружен нормально. Мне просто нужно знать, как пройти через каждую строку в электронной таблице и обновить данные с помощью c #
Показать ещё 1 комментарий
Теги:
sql-server
excel

2 ответа

2
Лучший ответ

Вы можете использовать классы в пространстве имен Microsoft.Office.Interop.Excel, который абстрагирует все найденное решение. Вместо того, чтобы переписывать его, вы можете проверить эту статью: http://www.codeproject.com/Tips/696864/Working-with-Excel-Using-Csharp.

Еще лучше, почему бы не обойти среднего человека? Вы можете использовать существующий инструмент ETL, такой как Pentaho или Talend, или что-то прямое из Excel в вашу базу данных. Эти типы инструментов часто предлагают множество настроек и довольно просты в использовании. Я использовал Pentaho довольно много для буквально того, что вы описываете, и это избавило меня от боли в написании кода. Если вы этого не хотите/должны сами написать, я думаю, что это лучший подход.

  • 0
    Установка Excel на сервер только для использования взаимодействия - очень плохая идея и гарантированно вызовет проблемы. Что касается ETL, сам SQL Server включает полнофункциональную систему ETL с 1990-х годов. Это то, на чем основаны Pentaho и др.
0

Попробуйте эту общедоступную строку GetDataTableOfExcel (string file_path) {

            using (OleDbConnection conn = new OleDbConnection())
            {
                DataTable dt = new DataTable();
                string Import_FileName = Server.MapPath(file_path);
                //Import_FileName = System.IO.Path.GetDirectoryName(file_path);
                string fileExtension = Path.GetExtension(Import_FileName);
                if (fileExtension == ".xlsx")
                    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'";
                using (OleDbCommand comm = new OleDbCommand())
                {
                    comm.CommandText = "Select * from [Sheet1$]";
                    comm.Connection = conn;
                    using (OleDbDataAdapter da = new OleDbDataAdapter())
                    {
                        da.SelectCommand = comm;
                        da.Fill(dt);
                                                    }
                }
            }
        }

Теперь ваши данные в DataTable. Вы можете создать запрос на вставку из данных datatable.

file_path - полный путь к файлу excel с именем каталога.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню