已知文件夹路径,文件夹里有多个Excel表格,表格中有大量数据,不知道数据在哪个表格中,已知表格指定行的单元格内容与指定列的单元格内容,使用C#遍历表格查找这两个单元格交叉对应的数据
时间: 2024-02-23 09:03:09 浏览: 69
c# 遍历文件夹
你可以使用C#中的OpenXml包来读取Excel文件。下面是一个实现的示例代码:
```csharp
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
public static string FindData(string folderPath, string rowValue, string columnValue)
{
string data = null;
// 遍历文件夹中的所有Excel文件
foreach (string filePath in Directory.GetFiles(folderPath, "*.xlsx"))
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = document.WorkbookPart;
// 遍历WorkbookPart中的所有Sheet
foreach (WorksheetPart worksheetPart in workbookPart.WorksheetParts)
{
Worksheet worksheet = worksheetPart.Worksheet;
SheetData sheetData = worksheet.GetFirstChild<SheetData>();
// 遍历SheetData中的所有行
foreach (Row row in sheetData.Elements<Row>())
{
bool foundRowValue = false;
// 遍历行中的所有单元格
foreach (Cell cell in row.Elements<Cell>())
{
string cellValue = GetCellValue(cell, workbookPart);
// 判断单元格的值是否与指定行的值相等
if (cellValue == rowValue)
{
foundRowValue = true;
break;
}
}
// 如果找到了指定行的值,继续查找指定列的值
if (foundRowValue)
{
bool foundColumnValue = false;
// 遍历行中的所有单元格
foreach (Cell cell in row.Elements<Cell>())
{
string cellValue = GetCellValue(cell, workbookPart);
// 判断单元格的值是否与指定列的值相等
if (cellValue == columnValue)
{
// 获取指定行和指定列交叉的单元格的值
Cell targetCell = worksheet.GetFirstChild<SheetData>().GetChild(row.RowIndex - 1).Elements<Cell>().ElementAt(cell.CellReference.ColumnIndex - 1);
data = GetCellValue(targetCell, workbookPart);
foundColumnValue = true;
break;
}
}
// 如果找到了指定列的值,结束查找
if (foundColumnValue)
{
return data;
}
}
}
}
}
}
return data;
}
// 获取单元格的值
private static string GetCellValue(Cell cell, WorkbookPart workbookPart)
{
string cellValue = null;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
SharedStringTablePart sharedStringTablePart = workbookPart.SharedStringTablePart;
if (sharedStringTablePart != null)
{
SharedStringItem sharedStringItem = sharedStringTablePart.SharedStringTable.ElementAt(int.Parse(cell.InnerText));
if (sharedStringItem != null)
{
cellValue = sharedStringItem.InnerText;
}
}
}
else
{
cellValue = cell.InnerText;
}
return cellValue;
}
```
使用时,你可以调用这个方法并传入文件夹路径、指定行的单元格内容和指定列的单元格内容。这个方法会遍历文件夹中的所有Excel文件,查找指定行和指定列交叉的单元格,并返回这个单元格的值。
阅读全文