首页 > 解决方案 > Excel 工作表中未跳过合并的单元格

问题描述

我正在尝试从包含一些合并单元格的 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

我试过这个: Get Merged Cell Area with EPPLus但没有运气。

我要读取的列是从“F”到“J”,但“G”、“H”和“I”是合并的,所以在这里我想要“G”中的值,我想忽略“H”和“一世”。

有任何想法吗?

我很乐意添加任何说明。

更新

除了 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”获取值,但我无法“跳过”“H”和“I”直接进入“J”并获取值。所以基本上从第 6 列到第 10 列,我想跳过第 8 和第 9 列,直接进入第 10 列。

标签: asp.netvb.netepplus

解决方案


最后,没有必要尝试“跳过任何东西”。我删除了与“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

推荐阅读