导出到Excel但过滤某些行

时间:2013-12-10 22:32:11

标签: vb.net datagridview export-to-excel

我有一个名为dgvSNEvents的datagridview,如下所示:

enter image description here

这个dgv只是一个小样本,但我需要的是导出这个dgv而不包含任何包含“No Data Found”的行,你可以在上面看到它们。这是我用来导出所有内容的代码,包括不需要的行。导出是通过Office Automation完成的,我可以生成一个文件。

For iX = 0 To dgvSNEvents.Rows.Count - 1
    For iY = 0 To dgvSNEvents.Columns.Count - 1
        If dgvSNEvents.Rows(iX).Cells("Event Outcome").Value = "F" Then
        ' this will paint the background in red because the column named "Event Outcome" has an "F" for a value
                xlCells(iX + 2, iY + 1).interior.colorindex = 22
                xlCells(iX + 2, iY + 1).value = dgvSNEvents(iY, iX).Value
        Else
        ' there aren't any "F's" so just export the row
                xlCells(iX + 2, iY + 1).value = dgvSNEvents(iY, iX).Value
        End If
    Next
Next

我不知道这是否足够继续,所以我会根据需要进行编辑。


以下是应用OSKM代码后的输出:

Code change for output to Excel

2 个答案:

答案 0 :(得分:1)

您只需要一个用于检查数据的if语句和一个单独的变量来确定导出的电子表格中的位置,例如:

Dim XlRow as Int32 = 0
For iX = 0 To dgvSNEvents.Rows.Count - 1
        'add ifstatement to skip column loop if cell entry is 'No Data Found'
        If dgvSNEvents.Rows(iX).Cells("Part Number").Value <> "No Data Found" Then 
            For iY = 0 To dgvSNEvents.Columns.Count - 1
                If dgvSNEvents.Rows(iX).Cells("Event Outcome").Value = "F" Then
                ' this will paint the background in red because the column named "Event Outcome" has an "F" for a value
                    xlCells(XlRow + 2, iY + 1).interior.colorindex = 22
                    xlCells(XlRow + 2, iY + 1).value = dgvSNEvents(iY, iX).Value
                Else
                ' there aren't any "F's" so just export the row
                    xlCells(XlRow + 2, iY + 1).value = dgvSNEvents(iY, iX).Value
                End If
            Next
            XlRow += 1
        End If
Next

答案 1 :(得分:0)

我会从数据表中导出。使用Select()过滤行,并将它们放入另一个数据表中。将此新数据表导出到Excel中。代码将变得更加简单易用。

编辑:甚至可以从DataRow()数组中导出,因为这是Select()返回的内容。通过不必创建数据表,您将获得一些性能提升。如果您决定让Select()条件成为动态,那么您可以执行此操作,然后执行空Select()将按原样返回所有内容,因此看起来所有角落案例都适合您。