我有一个使用ExcelReaderFactory
将数据从Excel导入数据库的过程。但是当有空行/列时,我们面临着问题。以下是我的原始代码:
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileContent);
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
DataTable dataTable = result.Tables[0].Rows
它会产生两个问题:
如果最后有空行,它们将在数据表中。
如果最后有空colmns,它们将在数据表中。
有没有办法删除空行和列。 我可以使用下面的代码
从datatable中删除空行IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileContent);
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
DataTable dataTable = result.Tables[0].Rows
.Cast<DataRow>()
.Where(row => !row.ItemArray.All(field => field is DBNull ||
string.IsNullOrWhiteSpace(field as string ?? field.ToString())))
.CopyToDataTable();
return dataTable;
但它不会删除空列。 有没有更好的方法呢?
如何删除空列?
答案 0 :(得分:3)
您可以使用此扩展程序:
public static void RemoveEmptyColumns(this DataTable table, int columnStartIndex = 0)
{
for (int i = table.Columns.Count - 1; i >= columnStartIndex; i--)
{
DataColumn col = table.Columns[i];
if (table.AsEnumerable().All(r => r.IsNull(col) || string.IsNullOrWhiteSpace(r[col].ToString())))
table.Columns.RemoveAt(i);
}
}
如果您想从给定索引开始,请将其传递给方法。