Rob*_*urd 5 c# excel .net-4.0 excel-interop
如何使用多个工作表迭代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;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你的时间,任何帮助表示赞赏.
小智 8
编辑你的方法,这里应该做你正在寻找的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个int数组来指示你想要读取哪些列,然后在每一行上我们只是遍历数组.
HTH,Z
例如,您可以使用类似的方法来获取 C 列:
var numberOfRows = sheet.UsedRange.Columns[3, Type.Missing].Rows.Count;
var values = sheet.Range["C1:C" + numberOfRows].Value2;
Run Code Online (Sandbox Code Playgroud)
numberOfRows 保存工作表中的行数(我认为它不会跳过顶部的空白行,但不确定)。之后,您选择从 C1 到 CN 的范围并获取包含这些值的 Value2。请注意,值数组实际上是一个二维数组。您现在可以轻松地执行 for 循环来获取项目:
for (int i = 1; i <= values.Length; i++){
sb.Append(values[i, 1] + " ");
}
Run Code Online (Sandbox Code Playgroud)
如果列彼此相邻等情况,可以对此进行优化,但上面的代码应该可以帮助您入门。