读取excel中的列到c#

时间:2015-12-04 01:02:21

标签: c# excel

您好我正在尝试将excel文件读取到c#,但我想将列数据转换为字符串数组,然后转换为字符串。我想我已经在这里做过但不确定。无论如何,当我尝试读取我的第二个if语句的excel列的标题时,我得到一个错误,说“索引超出了数组的范围。”。我是一个初学者,因此不明白我做错了什么。

if (xlApp != null)
{
    //Doing excel things
    int i = SheetNum;
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true);
    Excel.Sheets sheets = xlWorkbook.Worksheets;
    Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(i);
    Excel.Range usedRange = worksheet.UsedRange;
    Excel.Range colRange = usedRange.Columns;
    Excel.Range firstRow = worksheet.UsedRange.Rows[1];

    int rowCount = colRange.Rows.Count;
    int colCount = colRange.Columns.Count;

    for (int m = 1; m < colCount; m++)
    {
        for (int n = 0; n <= rowCount; n++)
        {
            System.Array myHeadvalues = (System.Array)firstRow.Cells.Value;
            string[] HeaderData = myHeadvalues.OfType<object>().Select(o => o.ToString()).ToArray();
            Excel.Range some = worksheet.UsedRange.Columns[m];
            System.Array myNamevalues = (System.Array)some.Cells.Value;
            string[] result1 = myNamevalues.OfType<object>().Select(o => o.ToString()).ToArray();

            //String types
            if (result1.Contains("Name") && HeaderData.Contains("Name"))
            {
                string tagval = HeaderData[n].ToString() + ".Array" + 
                string[] result = result1.Skip(1).ToArray();
                string Inputs = result[n + 1].ToString();
                System.Console.WriteLine(tagval, Inputs);

            }

            //Error Appears here//
            else if (result1.Contains("Description") && HeaderData.Contains("Description"))
            {
                string tagval = HeaderData[n].ToString() + ".Array" + 
                string[] result = result1.Skip(1).ToArray();
                string Inputs = result[n].ToString();
                System.Console.WriteLine(tagval, Inputs);

            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

顺便说一下,我修复了我的代码,现在它读取了没有问题的列。无论如何我可以加快速度,请告诉我。感谢。

List<string> ColumnValues = new List<string>();
                for (int n = 2; n < rowCount; n++)
                {
                    for (int m = 1; m < colCount; m++)
                    {
                        Excel.Range some = worksheet.UsedRange.Columns[m];

                        System.Array myvalues = (System.Array)some.Cells.Value;
                        string[] Data = myvalues.OfType<object>().Select(o => o.ToString()).ToArray();
                        ColumnValues = Data.ToList();
                        System.Console.WriteLine(ColumnValues);
                        //String Types
                        if (ColumnValues.Contains("Name"))
                        {
                            string tagval = "Product_Array[0].Name";
                            string[] result = ColumnValues.Skip(1).ToArray();

                        }


                    }


                }

        }

答案 1 :(得分:0)

这是偏离主题的(我还不能评论),但它可能有用:看起来你正在使用自动化或类似的东西。我建议使用像ClosedXML这样的库(这是免费的),因为它需要Excel应用程序来读写Excel文件。在大多数情况下,库将比Excel应用程序更快地完成工作。