0

I have a requirement to fine how many rows in the Excel sheet are filled with the data i.e rows which are not empty. I need to do that using c#.

Currently I am using the following code :

Excel.Application excelApp = new Excel.Application();
            string workbookPath = "C:\\ScriptTest\\bin\\Debug\\SDownloadScripts\\ExcelResult.xlsx";
            Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);
            Excel.Sheets excelSheets = excelWorkbook.Worksheets;
            string currentSheet = "Sheet1";
            Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
            //long i = excelWorksheet.UsedRange.Rows.Count;
            int lastUsedRow = excelWorksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell,

Type.Missing).Row;
            return lastUsedRow;
        }

My sheet has only four rows filled but i getting 65536. I need 4 as a result i.e no of rows filled with some data. Please suggest.

1
  • Just to shed some additional light on this, Excel considers a cell non-empty if it has a style applied. I wish it didn't, but that's what it does. Commented May 9, 2014 at 11:09

3 Answers 3

3

Try this..

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\xxxxxx\Desktop\1-8-13-ct.xlsx';Extended Properties=Excel 12.0;Persist Security Info=False";
    //Create Connection to Excel work book
    OleDbConnection excelConnection =new OleDbConnection(excelConnectionString);
    //Create OleDbCommand to fetch data from Excel
     OleDbCommand cmd = new OleDbCommand("select count(*) from [Sheet1$]", excelConnection);
    con.Open();
    int rows = (int)cmd.ExecuteScalar();
  con.Close();
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks a lot Arbaaz. After so much of effort your solution helped me a lot.
You're Welcome. I am glad I could be any help. :)
0

private DataSet CreateDataSource(string strFilePath, string strSheetName) { DataSet myDataSet; myDataSet = null; try {

        if (strSheetName.Length > 0)
        {
            StringBuilder strConnectionString = new StringBuilder();
            strConnectionString.AppendFormat("Provider={0};", "Microsoft.ACE.OLEDB.12.0");
            strConnectionString.AppendFormat("Data Source={0};", strFilePath);
            strConnectionString.Append("Extended Properties=");
            strConnectionString.Append(((char)34).ToString()); //start of trickypart
            strConnectionString.Append("Excel 12.0 Xml;");
            // always treat contents of cells as text, which gives us full control/responsibility for casting to numeric when ncessary
            strConnectionString.Append(((char)34).ToString()); // end of tricky part
            string str = strConnectionString.ToString();

            OleDbConnection conn = new OleDbConnection(str);

            OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + strSheetName + "$] where QuestionDescription <>''", str);
            myDataSet = new DataSet();
            myCommand.Fill(myDataSet);
        }
        else
        {
            trError.Visible = true;
            lblError.Text = "File is Invalid format";
        }
    }
    catch
    {
        trError.Visible = true;
        lblError.Text = "Invalid format!!";
    }
    return myDataSet;
}

for using above code you can query for to get non blank rows. the result will be stored into dataset. you can get non empty cell count from dataset. To this code work you need to use the "Microsoft.ACE.OLEDB.12.0" provider.

Comments

0

I found some threads on stackoverflow asking a similar question. Maybe these already solve your question. This answer seems to be what you are looking for.

Depending on your result, the documentation for XlCelltype and the outcommented line I assume that the usedRange in your sheet is bigger than the actually used area. If the other solution doesn't work and you have no empty rows between your datarows you maybe could try searching for the first row in a column which has an empty cell (this row-1 should than be your needed rowcount).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.