【发布时间】:2018-10-28 20:24:34
【问题描述】:
我有一个使用ExcelReaderFactory 将数据从excel 导入数据库的过程。但是当有空行/列时,我们就会面临问题。以下是我的原始代码:
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileContent);
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
DataTable dataTable = result.Tables[0].Rows
它产生了 2 个问题:
如果最后有空行,它们将在数据表中。
如果最后有空的列,它们会在数据表中。
有什么方法可以同时删除空行和空列。 我可以使用以下代码从数据表中删除空行
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;
但它不会删除空列。 有没有更好的方法?
如何删除空列?
【问题讨论】:
-
导入前先试试,把需要的数据范围定义为Table
-
为什么 _color、option 和 _extension 不被视为空列?
-
@Sunil,从列名可以看出,这些列是用户定义的,留空。但是 Column6、Column7、Column8 由于是空列。
-
尝试使用 microsoft.ace.oledb 而不是 OpenXMl 库。那么你可能没有这个问题
-
@T.S.是的,这将解决问题,但现在无法切换到 oledb
标签: c# excel datatable excel-reader