简体   繁体   中英

Show Data from Excel Using C#

My code is here but i cannot get my required result

            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];
    }

I have a data in an excel sheet like this https://i.stack.imgur.com/nZl4K.png

I want to show data like this using c#. https://i.stack.imgur.com/BjzZd.png

Your "Code" simply consists of the ExcelDataReader documentation sample. This will parse the dataset into a collection with the format you requested.

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
}));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM