如何通过Excel工作表遍历从特定列仅提取数据(How to iterate through Exc

2019-08-31 19:42发布

你如何通过Excel工作簿与多个工作表仅取出发言权列“C”,“E”和“F”的数据迭代?

这里是我迄今的代码:

public static string ExtractData(string filePath)
    {
        Excel.Application excelApp = new Excel.Application();
        Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);

        string data = string.Empty;

        int i = 0;
        foreach (Excel.Worksheet sheet in workBook.Worksheets)
        {
            data += "*******   Sheet " + i++.ToString() + "   ********\n";

            //foreach (Excel.Range row in sheet.UsedRange.Rows)
            //{
            //    data += row.Range["C"].Value.ToString();
            //}

            foreach (Excel.Range row in sheet.UsedRange.Rows)
            {
                foreach (Excel.Range cell in row.Columns)
                {
                    data += cell.Value + "   ";
                }
                data += "\n";
            }
        }

        excelApp.Quit();

        return data;
    }

非常感谢您的宝贵时间,任何帮助表示赞赏。

Answer 1:

编辑你的方法,这里的东西应该做你要找的内容:

public static string ExtractData(string filePath)
{
    Excel.Application excelApp = new Excel.Application();
    Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);
    int[] Cols = { 3, 5, 6 }; //Columns to loop
                 //C, E, F
    string data = string.Empty;

    int i = 0;
    foreach (Excel.Worksheet sheet in workBook.Worksheets)
    {
        data += "*******   Sheet " + i++.ToString() + "   ********\n";

        foreach (Excel.Range row in sheet.UsedRange.Rows)
        {
            foreach (int c in Cols) //changed here to loop through columns
            {
                data += sheet.Cells[row.Row, c].Value2.ToString() + "   ";
            }
            data += "\n";
        }
    }

    excelApp.Quit();

    return data;
}

我创建了一个int数组,表示你想从阅读的列,然后在每一行我们只是通过数组循环。

HTH,Z



Answer 2:

你可以使用这样的事情来获得C列,例如:

var numberOfRows = sheet.UsedRange.Columns[3, Type.Missing].Rows.Count;
var values = sheet.Range["C1:C" + numberOfRows].Value2;

numberOfRows持有该工作表(我认为它不会在顶部寿跳过空白行,不知道)的行数。 之后,你选择CN范围为C1,并获得其中包含的值值2。 注意该值阵列实际上是一个二维阵列。 现在,您可以轻松地做一个for循环来获得的项目:

for (int i = 1; i <= values.Length; i++){
   sb.Append(values[i, 1] + " ");
}

这可能的情况下,列进行优化是彼此相邻等,但上面的代码应该让你开始。



文章来源: How to iterate through Excel Worksheets only extracting data from specific columns