使用 ClosedXML 从 Excel 文件中读取
Reading from Excel File using ClosedXML
我的 Excel 文件不在表格数据中。我正在尝试读取 excel 文件。
我的 excel 文件中有一些表格部分。
我需要遍历表格中的第 3 行到第 20 行并读取数据。
这是我的部分代码:
string fileName = "C:\Folder1\Prev.xlsx";
var workbook = new XLWorkbook(fileName);
var ws1 = workbook.Worksheet(1);
如何遍历第 3 行到第 20 行并读取第 3、4、6、7、8 列?
此外,如果一行为空,我如何确定它以便我可以跳过它而不读取每一列都有给定行的值。
要访问一行:
var row = ws1.Row(3);
检查该行是否为空:
bool empty = row.IsEmpty();
要访问一行中的单元格(列):
var cell = row.Cell(3);
要从单元格中获取值:
object value = cell.Value;
// or
string value = cell.GetValue<string>();
有关详细信息,请参阅 documentation。
我更喜欢使用 RowsUsed()
方法来获取仅包含那些非空行或已被用户编辑的行的列表。这样我就可以避免在处理每一行时进行空检查。
我不确定这个解决方案是否能解决 OP 的问题。但是这个代码片段可以处理所有 非空 行中的第 3 到第 20 行号,因为我在开始该过程之前已经过滤了空行。在处理之前过滤非空行会影响将要处理的行数。
但我觉得 RowsUsed()
方法在处理 excel sheet.
的行时在任何一般情况下都非常有用
string fileName = "C:\Folder1\Prev.xlsx";
using (var excelWorkbook = new XLWorkbook(fileName))
{
var nonEmptyDataRows = excelWorkbook.Worksheet(1).RowsUsed();
foreach (var dataRow in nonEmptyDataRows)
{
//for row number check
if(dataRow.RowNumber() >=3 && dataRow.RowNumber() <= 20)
{
//to get column # 3's data
var cell = dataRow.Cell(3).Value;
}
}
}
这是我的果酱。
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
foreach (var row in rows)
{
var rowNumber = row.RowNumber();
// Process the row
}
如果您只使用 .RowsUsed()
,您的范围将包含大量列。远远超过实际填写的!
所以先用.RangeUsed()
来限制范围。这将帮助您更快地处理文件!
您也可以使用 .Skip(1)
跳过第 header 行(如果有的话)。
我的 Excel 文件不在表格数据中。我正在尝试读取 excel 文件。 我的 excel 文件中有一些表格部分。
我需要遍历表格中的第 3 行到第 20 行并读取数据。
这是我的部分代码:
string fileName = "C:\Folder1\Prev.xlsx";
var workbook = new XLWorkbook(fileName);
var ws1 = workbook.Worksheet(1);
如何遍历第 3 行到第 20 行并读取第 3、4、6、7、8 列? 此外,如果一行为空,我如何确定它以便我可以跳过它而不读取每一列都有给定行的值。
要访问一行:
var row = ws1.Row(3);
检查该行是否为空:
bool empty = row.IsEmpty();
要访问一行中的单元格(列):
var cell = row.Cell(3);
要从单元格中获取值:
object value = cell.Value;
// or
string value = cell.GetValue<string>();
有关详细信息,请参阅 documentation。
我更喜欢使用 RowsUsed()
方法来获取仅包含那些非空行或已被用户编辑的行的列表。这样我就可以避免在处理每一行时进行空检查。
我不确定这个解决方案是否能解决 OP 的问题。但是这个代码片段可以处理所有 非空 行中的第 3 到第 20 行号,因为我在开始该过程之前已经过滤了空行。在处理之前过滤非空行会影响将要处理的行数。
但我觉得 RowsUsed()
方法在处理 excel sheet.
string fileName = "C:\Folder1\Prev.xlsx";
using (var excelWorkbook = new XLWorkbook(fileName))
{
var nonEmptyDataRows = excelWorkbook.Worksheet(1).RowsUsed();
foreach (var dataRow in nonEmptyDataRows)
{
//for row number check
if(dataRow.RowNumber() >=3 && dataRow.RowNumber() <= 20)
{
//to get column # 3's data
var cell = dataRow.Cell(3).Value;
}
}
}
这是我的果酱。
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
foreach (var row in rows)
{
var rowNumber = row.RowNumber();
// Process the row
}
如果您只使用 .RowsUsed()
,您的范围将包含大量列。远远超过实际填写的!
所以先用.RangeUsed()
来限制范围。这将帮助您更快地处理文件!
您也可以使用 .Skip(1)
跳过第 header 行(如果有的话)。