Using ExcelDataReader to read Excel data starting from a particular cell

后端 未结 8 1827
感情败类
感情败类 2020-12-02 22:46

I am using ExcelDataReader to read data from my Excel workbook in C#.
But structure of my Excel sheet is such that data to be read can start from any particular cell and

相关标签:
8条回答
  • 2020-12-02 23:25

    To be more clear, I will begin at the beginning.

    I will rely on the sample code found in https://github.com/ExcelDataReader/ExcelDataReader, but with some modifications to avoid inconveniences.

    The following code detects the file format, either xls or xlsx.

    FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
    IExcelDataReader excelReader;
    
    //1. Reading Excel file
    if (Path.GetExtension(filePath).ToUpper() == ".XLS")
    {
        //1.1 Reading from a binary Excel file ('97-2003 format; *.xls)
        excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
    }
    else
    {
        //1.2 Reading from a OpenXml Excel file (2007 format; *.xlsx)
        excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
    }
    
    //2. DataSet - The result of each spreadsheet will be created in the result.Tables
    DataSet result = excelReader.AsDataSet();
    
    //3. DataSet - Create column names from first row
    excelReader.IsFirstRowAsColumnNames = false;
    

    Now we can access the file contents in a more convenient way. I use DataTable for this. The following is an example to access a specific cell, and print its value in the console:

    DataTable dt = result.Tables[0];
    Console.WriteLine(dt.Rows[rowPosition][columnPosition]);
    

    If you do not want to do a DataTable, you can do the same as follows:

    Console.WriteLine(result.Tables[0].Rows[rowPosition][columnPosition]);
    

    It is important not try to read beyond the limits of the table, for this you can see the number of rows and columns as follows:

    Console.WriteLine(result.Tables[0].Rows.Count);
    Console.WriteLine(result.Tables[0].Columns.Count);
    

    Finally, when you're done, you should close the reader and free resources:

    //5. Free resources (IExcelDataReader is IDisposable)
    excelReader.Close();
    

    I hope you find it useful.

    (I understand that the question is old, but I make this contribution to enhance the knowledge base, because there is little material about particular implementations of this library).

    0 讨论(0)
  • 2020-12-02 23:38

    For ExcelDataReader v3.6.0 and above. I struggled a bit to iterate over the Rows. So here's a little more to the above code. Hope it helps for few atleast.

    using (var stream = System.IO.File.Open(copyPath, FileMode.Open, FileAccess.Read))
                        {
    
                            IExcelDataReader excelDataReader = ExcelDataReader.ExcelReaderFactory.CreateReader(stream);
    
                            var conf = new ExcelDataSetConfiguration()
                            {
                                ConfigureDataTable = a => new ExcelDataTableConfiguration
                                {
                                    UseHeaderRow = true
                                }
                            };
    
                            DataSet dataSet = excelDataReader.AsDataSet(conf);
                            //DataTable dataTable = dataSet.Tables["Sheet1"];
                            DataRowCollection row = dataSet.Tables["Sheet1"].Rows;
                            //DataColumnCollection col = dataSet.Tables["Sheet1"].Columns;
    
                            List<object> rowDataList = null;
                            List<object> allRowsList = new List<object>();
                            foreach (DataRow item in row)
                            {
                                rowDataList = item.ItemArray.ToList(); //list of each rows
                                allRowsList.Add(rowDataList); //adding the above list of each row to another list
                            }
    
                        }
    
    0 讨论(0)
提交回复
热议问题