Считывание из 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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д