Excel 工作表中未跳过合并的单元格
Merged Cells not being skipped in Excel worksheet
我正在尝试从包含一些合并单元格的 Excel 工作表上传数据。
这是有问题的代码。
Using excel = New ExcelPackage(ulExcelData.PostedFile.InputStream)
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader = False
Dim _mergedAddress = _worksheet.MergedCells(13, 7)
Dim mergedadress = _worksheet.MergedCells(1, 2)
For Each col In _worksheet.Cells(13, 7, _worksheet.Dimension.End.Row, 10)
_dataTable.Columns.Add(If(_hasHeader, Nothing, col.Value))
String.Format("{0}", col.Start.Column)
Next
For _rowNumber = 1 To _worksheet.Dimension.End.Row
Dim _worksheetRow = _worksheet.Cells(_rowNumber, 13, _rowNumber, 10)
Dim _row As DataRow = _dataTable.Rows.Add()
For Each cell In _worksheetRow
If cell.Value Is Nothing Then
_row.Delete()
GoTo executeInsert
End If
Next cell
Next
我试过这个:
但运气不好。
我想阅读的栏目是从"F"到"J",但是"G"、"H"和"I"被合并了,所以在这里我想要"G" 中的值,我想忽略 "H" 和 "I".
有什么想法吗?
我很乐意添加任何说明。
更新
除 J 列外,所有内容均按正常方式保存。我点击 "H" 并将空值保存到我的数据库中,因为 "H" 和 "I" 是空单元格。
更新代码
For _rowNumber = 13 To _worksheet.Dimension.End.Row
Dim _worksheetRow = _worksheet.Cells(_rowNumber, 6, _rowNumber, 9) 'Cols F, G, H, I'
Dim _row As DataRow = _dataTable.Rows.Add()
For Each cell In _worksheetRow
If cell.Value Is Nothing Then
Continue For
Else
_row(cell.Start.Column - 6) = cell.Value.ToString.Trim()
End If
Next cell
Next
我正在从 "G" 获取值,但我无法 "skip" "H" 和 "I" 直接转到 "J" 并获取值.所以基本上从第 6 列到第 10 列,我想跳过第 8 列和第 9 列,直接进入第 10 列。
终于不用再试了"skip anything"。我删除了与 "G" 合并的额外两列,因为它们不包含任何值并且一切正常。我只是将这一行添加到我的代码中。
_worksheet.DeleteColumn(8, 2)
最终代码部分
Using excel = New ExcelPackage(ulExcelData.PostedFile.InputStream)
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader As Boolean = False
_worksheet.DeleteColumn(8, 2)
For Each col In _worksheet.Cells("F13:J13")
If col.Value IsNot Nothing Then
_dataTable.Columns.Add()
String.Format("{0}", col.Start.Column)
Else
Continue For
End If
Next
我正在尝试从包含一些合并单元格的 Excel 工作表上传数据。
这是有问题的代码。
Using excel = New ExcelPackage(ulExcelData.PostedFile.InputStream)
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader = False
Dim _mergedAddress = _worksheet.MergedCells(13, 7)
Dim mergedadress = _worksheet.MergedCells(1, 2)
For Each col In _worksheet.Cells(13, 7, _worksheet.Dimension.End.Row, 10)
_dataTable.Columns.Add(If(_hasHeader, Nothing, col.Value))
String.Format("{0}", col.Start.Column)
Next
For _rowNumber = 1 To _worksheet.Dimension.End.Row
Dim _worksheetRow = _worksheet.Cells(_rowNumber, 13, _rowNumber, 10)
Dim _row As DataRow = _dataTable.Rows.Add()
For Each cell In _worksheetRow
If cell.Value Is Nothing Then
_row.Delete()
GoTo executeInsert
End If
Next cell
Next
我试过这个:
我想阅读的栏目是从"F"到"J",但是"G"、"H"和"I"被合并了,所以在这里我想要"G" 中的值,我想忽略 "H" 和 "I".
有什么想法吗?
我很乐意添加任何说明。
更新
除 J 列外,所有内容均按正常方式保存。我点击 "H" 并将空值保存到我的数据库中,因为 "H" 和 "I" 是空单元格。
更新代码
For _rowNumber = 13 To _worksheet.Dimension.End.Row
Dim _worksheetRow = _worksheet.Cells(_rowNumber, 6, _rowNumber, 9) 'Cols F, G, H, I'
Dim _row As DataRow = _dataTable.Rows.Add()
For Each cell In _worksheetRow
If cell.Value Is Nothing Then
Continue For
Else
_row(cell.Start.Column - 6) = cell.Value.ToString.Trim()
End If
Next cell
Next
我正在从 "G" 获取值,但我无法 "skip" "H" 和 "I" 直接转到 "J" 并获取值.所以基本上从第 6 列到第 10 列,我想跳过第 8 列和第 9 列,直接进入第 10 列。
终于不用再试了"skip anything"。我删除了与 "G" 合并的额外两列,因为它们不包含任何值并且一切正常。我只是将这一行添加到我的代码中。
_worksheet.DeleteColumn(8, 2)
最终代码部分
Using excel = New ExcelPackage(ulExcelData.PostedFile.InputStream)
Dim _worksheet = excel.Workbook.Worksheets.First()
Dim _hasHeader As Boolean = False
_worksheet.DeleteColumn(8, 2)
For Each col In _worksheet.Cells("F13:J13")
If col.Value IsNot Nothing Then
_dataTable.Columns.Add()
String.Format("{0}", col.Start.Column)
Else
Continue For
End If
Next