0

I have got below code sample with me where I am able to read my excel file:

private bool excelvalidate(string requestType, string filename)
{
    Excel.Application ExcelObj = null;
    ExcelObj = new Excel.Application();
    Excel.Range range = null;
    Excel.Workbook theWorkbook = null;
    Excel.Sheets sheets = null;
    Excel.Worksheet worksheet = null;

    bool strValResult = false;
    string[] strArray = null;
    if (ExcelObj != null)
    {
        theWorkbook = ExcelObj.Workbooks.Open("D:/Support/" + filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        sheets = theWorkbook.Worksheets;
        worksheet = (Excel.Worksheet)sheets.get_Item(1);
        for (int x = 1; x <= 1; x++)
        {
            range = worksheet.get_Range("A" + x.ToString(), "G" + x.ToString());
            System.Array myvalues = (System.Array)range.Cells.get_Value(null);
            strArray = ConvertToStringArray(myvalues);
        }
        if (requestType == "CreateCityKeys" || requestType == "CreateCityShortKeys")
        {
            strValResult = CheckStringInArray("City Name", strArray);
            if (strValResult == true)
            {
               //Here I want to call a function which will return all the column values in  City Name something like below
               string [] columnArray = ReadAllValuesFromColumn("City Name");
            }
        }
        else if (requestType == "CreateAirportKeys")
        {
            strValResult = CheckStringInArray("Full Airport Name", strArray);
        }
        else if (requestType == "CreateAirportShortKeys")
        {
            strValResult = CheckStringInArray("Airport Short Name", strArray);
        }
        ExcelObj.Workbooks.Close();
        ExcelObj.Quit();
        ExcelObj = null;
        theWorkbook = null;
        sheets = null;
        range = null;
        Marshal.ReleaseComObject(theWorkbook);
    }
    return strValResult;
}
private bool CheckStringInArray(string chkstr, string[] strArr)
{
    bool exists = false;
    foreach (string x in strArr)
    {
        if (x.Contains(chkstr))
        {
            exists = true;
        }
    }
    return exists;
}

private string[] ConvertToStringArray(System.Array values)
{
    // create a new string array
    string[] theArray = new string[values.Length];

    // loop through the 2-D System.Array and populate the 1-D String Array
    for (int i = 1; i <= values.Length; i++)
    {
        if (values.GetValue(1, i) == null)
            theArray[i - 1] = "";
        else
            theArray[i - 1] = (string)values.GetValue(1, i).ToString();
    }
    return theArray;
}  

In above code you can see that, I am trying to call a function as below:

string [] columnArray = ReadAllValuesFromColumn("City Name");

Please suggest logic to write the above function to read all the column values if I pass Column Header name as "City Name"

Please suggest with some code snippets.

Thanks

1 Answer 1

1

Below is the solution which I wrote for my above problem, please suggest for any changes.

 private string ReadAllValuesFromColumn(string fieldname, string filename)
    {
        Excel.Application ExcelObj = null;
        ExcelObj = new Excel.Application();
        Excel.Range cxRange = null;
        Excel.Range range = null; 
        Excel.Workbook theWorkbook = null;
        Excel.Sheets sheets = null;
        Excel.Worksheet worksheet = null;
        string[] strArray = null;
        StringBuilder sbReturn = new StringBuilder();
        Dictionary<string, ArrayList> dicArray = new Dictionary<string, ArrayList>();
        ArrayList fullArray = new ArrayList();
        try
        {
            if (ExcelObj != null)
            {
                theWorkbook = ExcelObj.Workbooks.Open("D:/Support/" + filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                sheets = theWorkbook.Worksheets;
                worksheet = (Excel.Worksheet)sheets.get_Item(1);
                cxRange = worksheet.UsedRange;
                string str;
                long lRowCount = cxRange.Rows.Count;
                long lColumnCount = cxRange.Columns.Count;
                for (int x = 1; x <= 1; x++)
                {
                    range = worksheet.get_Range("A" + x.ToString(), "G" + x.ToString());
                    System.Array myvalues = (System.Array)range.Cells.get_Value(null);
                    strArray = ConvertToStringArray(myvalues);
                }
                int fiedIndex = Array.IndexOf(strArray, fieldname);

                if (fiedIndex != -1)
                {
                    for (int y = 2; y <= lRowCount; y++)
                    {
                        str = (string)(cxRange.Cells[y,fiedIndex+1] as Excel.Range).Value2;
                        if (!string.IsNullOrEmpty(str))
                        {
                            fullArray.Add(str);
                        }
                    }
                }
                ExcelObj.Workbooks.Close();
                ExcelObj.Quit();
                ExcelObj = null;
                theWorkbook = null;
                sheets = null;
                range = null;
                cxRange=null;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return sbReturn.ToString();
    }

Thanks.

Sign up to request clarification or add additional context in comments.

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.