Собрать средние значения из Excel - C#
Формулировка задачи:
Доброго времени суток! Имеется лист Excel. Фрагмент листа:Лист Microsoft Excel.xlsx(Во всем файле ~ 3000 строк)
В столбце "B" имя станции, "L" - год, "S" - слой, и значения от "V" до "AW". Задача передо мной стоит следующая:
Вывести среднее значение столбцов от "V" до "AW" по слою "S" = поверхность, по всем или по конкретному году для станции "B". В столбцах от "V" до "AW", есть пустые ячейки.
Для теста попробовал считать один столбец со станциями:
Таким образом один столбец считывается около ~ 40 сек.
Если загонять все значения в модель:
То результат лучше, но всё равно очень плохой: ~30 сек.
Суть вопроса: Что мне лучше всего использовать, как поступить и в какую сторону смотреть в данной ситуации?
Листинг программы
- string path = @" Путь к файлу";
- Excel.Application xlApp = new Excel.Application();
- xlApp.DisplayAlerts = false;
- Excel.Workbook xlWb = xlApp.Workbooks.Open(path, 0, true,5, "", "", false,
- Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
- Excel.Worksheet xlWs = xlWb.Worksheets[1];
- foreach (Excel.Range item in xlWs.Range["B1:B3000"])
- {
- if (item.Text != null)
- {
- Console.WriteLine(item.Text);
- }
- else continue;
- }
- xlApp.Quit();
- Console.Read();
Листинг программы
- public class Point
- {
- public string Name { get; set; }
- }
Листинг программы
- string path = @"путь к файлу";
- Excel.Application xlApp = new Excel.Application();
- xlApp.DisplayAlerts = false;
- Excel.Workbook xlWb = xlApp.Workbooks.Open(path, 0, true,5, "", "", false,
- Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
- Excel.Worksheet xlWs = xlWb.Worksheets[1];
- ICollection<Point> Points = new List<Point>();
- foreach (Excel.Range item in xlWs.Range["B1:B3000"])
- {
- if (item.Text != null)
- {
- Point p = new Point();
- p.Name = Convert.ToString(item.Text);
- Points.Add(p);
- }
- else continue;
- }
- foreach (var item in Points)
- {
- Console.WriteLine(item.Name);
- }
- xlApp.Quit();
- Console.Read();
Решение задачи: «Собрать средние значения из Excel»
textual
Листинг программы
- Excel.Application app = new Excel.Application() { Visible = true };
- Excel.Workbook wb = app.Workbooks.Open(@"p:\Лист Microsoft Excel.xlsx");
- Excel.Worksheet ws = wb.Worksheets[1];
- var range = ws.Range["B1", ws.Cells[ws.UsedRange.Rows.Count, "AV"]];
- var value = (object[,])range.Value;
- var points = new List<Dictionary<string, object>>();
- for (int i = value.GetLowerBound(0) + 1; i < value.GetUpperBound(0); i++)
- {
- var point = new Dictionary<string, object>();
- for (int j = value.GetLowerBound(1); j < value.GetUpperBound(1); j++)
- point[(string)value[value.GetLowerBound(0), j]] = value[i, j];
- points.Add(point);
- }
- var c = points
- .Where(p => Convert.ToString(p["Слой"]) == "поверхность")
- .Where(p => Convert.ToInt32(p["Year"]) == 2011)
- // группировка и вычисление значений, например:
- .Select(p => (double?)p["O2, ml/l"])
- .Where(p => p.HasValue)
- .Average();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д