asp.net - Excel 列值作为行而不是列附加到数据表中
问题描述
我有一个 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 最新版本。
有人对我如何按照上面照片中的示例将数据分成行有任何建议吗?如果需要,很高兴做出任何澄清。
解决方案
添加了没有标题的列的水平范围,并逐行读取每个单元格。
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
推荐阅读
- python - 如何在 python 的 spyder IDE 中添加模块
- java - 嵌入式 Jetty 在优雅终止期间关闭打开的连接
- node.js - 如何使用 node.js 应用程序中的内部存储位置从 Firebase 存储中获取 DownloadableURL?
- javascript - 有没有更好的方法从 JavaScript event.target 对象中获取选择器字符串?
- java - 生成一个三位数字Java
- laravel-5.7 - 如何获取包含所有帖子的身份验证追随者用户的帖子
- javascript - 如何在特定的基础上解析 BigInt?
- python - 未找到带有参数“(”,)”的“后详细信息”的反向
- python - 自定义模糊模糊字符串匹配以编辑距离 <= 1
- java - 无法访问类 com.sun.javafx.util.Utils(在模块 javafx.graphics 中)-JavaFX 和 Eclipse