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