Я ищу советы по наилучшему анализу файла 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 # - это ключ)
Поэтому, учитывая файл в этом формате, я хочу совместить пользователя с записью таблицы данных с использованием часов # и обновлять запись с каждой из данных ячеек. Каждый столбец в электронной таблице имеет ссылочный столбец в таблице данных. Вся помощь очень ценится.
Вы можете использовать классы в пространстве имен Microsoft.Office.Interop.Excel
, который абстрагирует все найденное решение. Вместо того, чтобы переписывать его, вы можете проверить эту статью: http://www.codeproject.com/Tips/696864/Working-with-Excel-Using-Csharp.
Еще лучше, почему бы не обойти среднего человека? Вы можете использовать существующий инструмент ETL, такой как Pentaho или Talend, или что-то прямое из Excel в вашу базу данных. Эти типы инструментов часто предлагают множество настроек и довольно просты в использовании. Я использовал Pentaho довольно много для буквально того, что вы описываете, и это избавило меня от боли в написании кода. Если вы этого не хотите/должны сами написать, я думаю, что это лучший подход.
Попробуйте эту общедоступную строку 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 с именем каталога.