Показать данные из Excel, используя C # - PullRequest
0 голосов
/ 08 октября 2019

Мой код здесь, но я не могу получить требуемый результат

            DataTable dtWB = new DataTable();
            dtWB.Columns.Add("Name");
            dtWB.Columns.Add("DOS");
            dtWB.Columns.Add("CPT");
            dtWB.AcceptChanges();
            DataRow drWB = null;

            // Auto-detect format, supports:
            byte[] ExcelData = File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + path);
            MemoryStream stream = new MemoryStream(ExcelData);
            using (var reader = ExcelReaderFactory.CreateReader(stream))
            {
                // Choose one of either 1 or 2:

                // 1. Use the reader methods
                do
                {
                    while (reader.Read())
                    {
                        // reader.GetDouble(0);
                    }
                } while (reader.NextResult());

                // 2. Use the AsDataSet extension method
                var result = reader.AsDataSet();

                //The result of each spreadsheet is in result.Tables
                var Tables = result.Tables;
                var CT = Tables.Count;
                DataTable WBdt = Tables[1];
    }

У меня есть данные в листе Excel, подобные этому https://i.stack.imgur.com/nZl4K.png

Я хочу показать данные, как это, используяC #. https://i.stack.imgur.com/BjzZd.png

1 Ответ

0 голосов
/ 08 октября 2019

Ваш «Код» просто состоит из ExcelDataReader образца документации. Это позволит проанализировать набор данных в коллекцию в формате, который вы запросили.

var records = new Dictionary<string, Dictionary<DateTime, double?>>();

using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        var firstTable = reader.AsDataSet().Tables[0];

        for (int i = 1; i < firstTable.Rows.Count; i++)
        {
            string name = firstTable.Rows[i].Field<string>(0);
            var dt_values = new Dictionary<DateTime, double?>();

            for (int j = 1; j < firstTable.Columns.Count; j++)
            {
                DateTime dt = firstTable.Rows[0].Field<DateTime>(j);
                double? value = firstTable.Rows[i].Field<double?>(j);
                dt_values.Add(dt, value);
            }

            records.Add(name, dt_values);
        }
   }
}

var formatted_data = records.SelectMany(x => x.Value.Select(y => new
{
    Name = x.Key,
    Dos = y.Key.ToShortDateString(),
    CPT = y.Value
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...