Собрать средние значения из Excel - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Имеется лист Excel. Фрагмент листа:Лист Microsoft Excel.xlsx(Во всем файле ~ 3000 строк) В столбце "B" имя станции, "L" - год, "S" - слой, и значения от "V" до "AW". Задача передо мной стоит следующая: Вывести среднее значение столбцов от "V" до "AW" по слою "S" = поверхность, по всем или по конкретному году для станции "B". В столбцах от "V" до "AW", есть пустые ячейки. Для теста попробовал считать один столбец со станциями:
Листинг программы
  1. string path = @" Путь к файлу";
  2. Excel.Application xlApp = new Excel.Application();
  3. xlApp.DisplayAlerts = false;
  4. Excel.Workbook xlWb = xlApp.Workbooks.Open(path, 0, true,5, "", "", false,
  5. Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
  6. Excel.Worksheet xlWs = xlWb.Worksheets[1];
  7.  
  8. foreach (Excel.Range item in xlWs.Range["B1:B3000"])
  9. {
  10. if (item.Text != null)
  11. {
  12. Console.WriteLine(item.Text);
  13. }
  14. else continue;
  15. }
  16. xlApp.Quit();
  17. Console.Read();
Таким образом один столбец считывается около ~ 40 сек. Если загонять все значения в модель:
Листинг программы
  1. public class Point
  2. {
  3. public string Name { get; set; }
  4. }
Листинг программы
  1. string path = @"путь к файлу";
  2. Excel.Application xlApp = new Excel.Application();
  3. xlApp.DisplayAlerts = false;
  4. Excel.Workbook xlWb = xlApp.Workbooks.Open(path, 0, true,5, "", "", false,
  5. Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
  6. Excel.Worksheet xlWs = xlWb.Worksheets[1];
  7. ICollection<Point> Points = new List<Point>();
  8. foreach (Excel.Range item in xlWs.Range["B1:B3000"])
  9. {
  10. if (item.Text != null)
  11. {
  12. Point p = new Point();
  13. p.Name = Convert.ToString(item.Text);
  14. Points.Add(p);
  15. }
  16. else continue;
  17.  
  18. }
  19. foreach (var item in Points)
  20. {
  21. Console.WriteLine(item.Name);
  22. }
  23.  
  24. xlApp.Quit();
  25. Console.Read();
То результат лучше, но всё равно очень плохой: ~30 сек. Суть вопроса: Что мне лучше всего использовать, как поступить и в какую сторону смотреть в данной ситуации?

Решение задачи: «Собрать средние значения из Excel»

textual
Листинг программы
  1. Excel.Application app = new Excel.Application() { Visible = true };
  2. Excel.Workbook wb = app.Workbooks.Open(@"p:\Лист Microsoft Excel.xlsx");
  3. Excel.Worksheet ws = wb.Worksheets[1];
  4.  
  5. var range = ws.Range["B1", ws.Cells[ws.UsedRange.Rows.Count, "AV"]];
  6. var value = (object[,])range.Value;
  7.  
  8. var points = new List<Dictionary<string, object>>();
  9. for (int i = value.GetLowerBound(0) + 1; i < value.GetUpperBound(0); i++)
  10. {
  11.     var point = new Dictionary<string, object>();
  12.     for (int j = value.GetLowerBound(1); j < value.GetUpperBound(1); j++)
  13.         point[(string)value[value.GetLowerBound(0), j]] = value[i, j];
  14.  
  15.     points.Add(point);
  16. }
  17.  
  18. var c = points
  19.     .Where(p => Convert.ToString(p["Слой"]) == "поверхность")
  20.     .Where(p => Convert.ToInt32(p["Year"]) == 2011)
  21.     // группировка и вычисление значений, например:
  22.     .Select(p => (double?)p["O2, ml/l"])
  23.     .Where(p => p.HasValue)
  24.     .Average();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы