我有一个Excel文件,我需要阅读并将特定范围的特定值提取到数据表中,以便我可以将该数据保存到数据库的表中。
在调试时,在每个循环中我检查数据表可视化工具以查看正在进行的操作,并且我发现我将不同行的值附加到同一行。照片中的例子。
以下是负责该操作的代码。(包含在Try-Catch中)
Using excel As New ExcelPackage (ulTarget.PostedFile.InputStream)
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader = True
For Each cell In _worksheet.Cells(1,2,147,4)
_dataTable.Columns.Add(If(_hasHeader, cell.Value, String.Format("{0}", cell.Start.Column)))
If _worksheet.Cells.Value Is Nothing Then
Continue For
Next
假设1,2,147,4的范围是正确的,因为进入数据表的数据是正确的,行分离只是问题所在。 _dataTable是我的DataTable(显然我知道,但澄清它没什么不好)和_hasHeader被设置为True,因为上传的Excel工作表有标题,我不希望它们被放入DataTable,因为数据将全部结束在SQL Server中存在适当列名的表中。
此外,ulTarget是我的文件上传器。我正在使用EPPlus最新版本。
根据上面照片中的示例,有人建议如何将数据分成行吗?如果需要,很乐意做出任何澄清。
答案 0 :(得分:0)
添加了没有标题的列的水平范围,并逐行读取每个单元格。
Using excel As New ExcelPackage(ulTargetFile.PostedFile.InputStream)
'Add the columns'
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader As Boolean = False
For Each col In _worksheet.Cells("B1:D1")
_dataTable.Columns.Add(If(_hasHeader, Nothing, col.Value))
String.Format("{0}", col.Start.Column)
Next
'Add the rows'
For rowNumber As Integer = 1 To 147
Dim worksheetRow = _worksheet.Cells(rowNumber, 2, rowNumber, 4)
Dim row As DataRow = _dataTable.Rows.Add()
For Each cell In worksheetRow
row(cell.Start.Column - 2) = cell.Value
Next
Next