Home » excel » Reading Excel 2010 file – cells in C#

Reading Excel 2010 file – cells in C#

Posted by: admin April 23, 2020 Leave a comment

Questions:

UPDATE 2

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME);

            string testCaseName = "test_case_2";

            string query = String.Format("SELECT * from [{0}$] WHERE columns={1}", workbookName, testCaseName);

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);

            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet); //<<ERROR 

        DataTable myTable = dataSet.Tables[0]; 

ERROR:
No value given for one or more required parameters.

UPDATE END

UPDATE:

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME);
            string query = String.Format("select * from [{0}$]", workbookName);

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);               
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet);

            DataTable myTable = dataSet.Tables[0];

How to read data from cells and store it in array/string. I have done reading worksheet but can’t find any better of doing

so here is my excel sheet looks like:

enter image description here

I should be able to pass the column in my case test_case_1 or test_case_2 etc… and read the columns for that particular row….

How to&Answers:

Regarding filtering.

As you are using OleDb for your data retrieval, nothing prevents you from using more advanced SQL:

string testCaseName = "Test_case_1
string query = String.Format("SELECT * from [{0}$] WHERE columns=\"{1}\"", workbookName, testCaseName);

You can use the names of the columns for filtering. In your case the filter is on the columns field. (btw. it is a confusing name)

As far as I remember the header of the table must be in the first row, you may need to move your table one row up.

Answer:

I’d suggest you take a look at LinqToExcel. It makes querying Excel in .NET very easy.

var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Workbook.xlsx");

var current_test_case = "Test_case_1";

var query =
    from row in book.Worksheet("Sheet1")
    let columns = row["columns"].Cast<string>()
    where columns == current_test_case
    select new
    {
        id = row["id"].Cast<int>(),
        name = row["name"].Cast<string>(),
        caption = row["caption"].Cast<string>(),
        date = row["date"].Cast<DateTime>(),
        success = row["success"].Cast<bool>(),
    };

Answer:

Hi Abu Hamzah as your requirment read only required column the code is here that is a consol app for reading excel data

class Program
{
    internal static ILog logger = LogManager.GetLogger(typeof(Program));
    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();
        string firstName, lastName, dob, lexisNexisID;
        string filePath = @"yor directory path\your file name";

        ExcelProvider provider = ExcelProvider.Create(filePath, "Sheet1");
        foreach (ExcelRow row in (from x in provider select x))
        {
            Console.WriteLine("{0}", row.GetString(1));
            /* the row.Getstring(index) the index is for your column you mey select morcolume as Console.WriteLine("{0}/t{1}", row.GetString(0),row.Getstring(1)); */
        }

    }

}

public class ExcelRow
{
    List<object> columns;

    public ExcelRow()
    {
        columns = new List<object>();
    }

    internal void AddColumn(object value)
    {
        columns.Add(value);
    }

    public object this[int index]
    {
        get { return columns[index]; }
    }

    public string GetString(int index)
    {
        if (columns[index] is DBNull)
        {
            return null;
        }
        return columns[index].ToString();
    }

    public int Count
    {
        get { return this.columns.Count; }
    }
}

public class ExcelProvider : IEnumerable<ExcelRow>
{
    private string sheet;
    private string filePath;
    private List<ExcelRow> rows;


    public ExcelProvider()
    {
        rows = new List<ExcelRow>();
    }

    public static ExcelProvider Create(string filePath, string sheet)
    {
        ExcelProvider provider = new ExcelProvider();
        provider.sheet = sheet;
        provider.filePath = filePath;
        return provider;
    }

    private void Load()
    {
        string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=    ""Excel 12.0;HDR=YES;""";
        connectionString = string.Format(connectionString, filePath);
        rows.Clear();
        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            try
            {
                conn.Open();
            }
            catch (Exception ex)
            {
            }
            using (OleDbCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "select * from [" + sheet + "$]";
                using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        ExcelRow newRow = new ExcelRow();
                        for (int count = 0; count < reader.FieldCount; count++)
                        {
                            newRow.AddColumn(reader[count]);
                        }
                        rows.Add(newRow);
                    }
                }
            }
        }
    }

    public IEnumerator<ExcelRow> GetEnumerator()
    {
        Load();
        return rows.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        Load();
        return rows.GetEnumerator();
    }

}