Считывание из Excel в массив - C#
Формулировка задачи:
Помогите плиз со следующим вопросом. Необходимо считать данные из Excel-файла считать в некий массив с целью его дальнейшей сортировки и вывода некоторых списков в соответствии с полученным результатом. Вопрос собственно в следующем - как организовывается само считывание с некоего известного файла. Поиском пользовалась и статьи в нете тоже читала, но рахобраться все равно не могу. Если можно, напишите пожалуйста хоть с минимальными комментариями.
Заранее спасибо.
Решение задачи: «Считывание из Excel в массив»
textual
Листинг программы
string GetConnectionString(FileInfo _file)
{
Dictionary<string, string> props = new Dictionary<string, string>();
// XLSX - Excel 2007, 2010, 2012, 2013
if (_file.Extension == ".xlsx")
{
props["Provider"] = "Microsoft.ACE.OLEDB.12.0;";
props["Extended Properties"] = "Excel 12.0 XML";
props["Data Source"] = _file.FullName;
}
else if (_file.Extension == ".xls")
{
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Extended Properties"] = "Excel 8.0";
props["Data Source"] = "C:\\MyExcel.xls";
}
else throw new Exception("Неизвестное расширение файла!");
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
sb.Append(prop.Key);
sb.Append('=');
sb.Append(prop.Value);
sb.Append(';');
}
return sb.ToString();
}
private void File_Selected_New(FileInfo _file)
{
Stopwatch sw_total = new Stopwatch();
sw_total.Start();
DataSet ds = new DataSet();
string connectionString = GetConnectionString(_file);
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString))
{
conn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;
// Get all Sheets in Excel File
DataTable dtSheet = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
// Loop through all Sheets to get data
foreach (DataRow dr in dtSheet.Rows)
{
string sheetName = dr["TABLE_NAME"].ToString();
// Get all rows from the Sheet
cmd.CommandText = "SELECT * FROM [" + sheetName + "]";
DataTable dt = new DataTable();
dt.TableName = sheetName;
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
da.Fill(dt);
ds.Tables.Add(dt);
}
List<List<string>> list_table = new List<List<string>>();
for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
{
List<string> list_row = new List<string>();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
list_row.Add(ds.Tables[0].Rows[i].ItemArray[j].ToString());
list_table.Add(list_row);
}
}
sw_total.Stop();
lbTimes.Items.Add("Reading (new): " + sw_total.ElapsedMilliseconds + " ms");
}