如何读取特定的excel列值,使用c#2.0将它们放入字符串数组中

时间:2012-01-31 12:31:50

标签: excel c#-2.0

我有以下代码示例,我可以阅读我的excel文件:

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

在上面的代码中,您可以看到,我正在尝试调用以下函数:

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

如果我将列标题名称作为“城市名称”传递,请建议编写上述函数以读取所有列值的逻辑

请建议使用一些代码段。

由于

1 个答案:

答案 0 :(得分:1)

以下是我为上述问题编写的解决方案,请为任何更改建议。

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

感谢。