Visual studio 2013 如何将Datagridview导出到Excel,排除不可见行?

Visual studio 2013 如何将Datagridview导出到Excel,排除不可见行?,visual-studio-2013,datagridview,Visual Studio 2013,Datagridview,帮帮我,伙计们。下面的按钮代码允许我将筛选的行值导出到excel中 我添加了一个单选按钮,使某些行不可见 当我按下导出按钮(下面的代码)时,它也会导出不可见的行。 我想添加一个if语句来检查row.visible=false,然后从导出中跳过它 我不熟悉编码,所以请帮助我 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim xlapp As Microsoft.Off

帮帮我,伙计们。下面的按钮代码允许我将筛选的行值导出到excel中

我添加了一个单选按钮,使某些行不可见 当我按下导出按钮(下面的代码)时,它也会导出不可见的行。 我想添加一个if语句来检查row.visible=false,然后从导出中跳过它

我不熟悉编码,所以请帮助我

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim xlapp As Microsoft.Office.Interop.Excel.Application
    Dim xlworkbook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlworksheet As Microsoft.Office.Interop.Excel.Worksheet
    Dim misvalue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    xlapp = New Microsoft.Office.Interop.Excel.Application
    xlworkbook = xlapp.Workbooks.Add(misvalue)
    xlworksheet = xlworkbook.Sheets("sheet1")


    For i = 0 To DataGridView1.RowCount - 1
        For j = 0 To DataGridView1.ColumnCount - 1
            For k As Integer = 1 To DataGridView1.Columns.Count
                xlworksheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
                xlworksheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value
            Next
        Next
    Next

    xlworksheet.SaveAs("E:\vbexcel.xlsx")
    xlworkbook.Close()
    xlapp.Quit()

    releaseObject(xlapp)
    releaseObject(xlworkbook)
    releaseObject(xlworksheet)

    MsgBox("You can find the file E:\vbexcel.xlsx")
    Dim res As MsgBoxResult
    res = MsgBox("Process completed, Would you like to open the file?", MsgBoxStyle.YesNo)
    If (res = MsgBoxResult.Yes) Then
        Process.Start("E:\vbexcel.xlsx")
    End If
End Sub

只需检查该行,看看它是否可见。如果它是可见的,则跳过它

 For i = 0 To DataGridView1.RowCount - 1
        If DataGridView1.Rows[i].Visible = True Then ' If the row is visible then iterate through the columns/cells
           For j = 0 To DataGridView1.ColumnCount - 1
                For k As Integer = 1 To DataGridView1.Columns.Count
                  xlworksheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
                  xlworksheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value
                 Next
           Next
         End If

Next

大家好。我终于解决了问题,它跳过了不可见的行

问题是。导出时。当datagridview.row=不可见时,它将保留一个空行

这是密码

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim xlapp As Microsoft.Office.Interop.Excel.Application
    Dim misvalue As Object = System.Reflection.Missing.Value
    Dim rowsTotal, colsTotal As Short
    Dim V, I, J As Short
    xlapp = New Microsoft.Office.Interop.Excel.Application


    System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor

    Dim excelBook As Excel.Workbook = xlapp.Workbooks.Add
    Dim excelWorksheet As Excel.Worksheet = CType(excelBook.Worksheets(1), Excel.Worksheet)
    xlapp.Visible = True
    rowsTotal = DataGridView1.RowCount - 1
    colsTotal = DataGridView1.Columns.Count - 1

    With excelWorksheet
        .Cells.Select()
        .Cells.Delete()
        Dim curCol As Short = 0
        For iC = 0 To colsTotal
            If DataGridView1.Columns(iC).Visible Then
                .Cells(1, curCol + 1).Value = DataGridView1.Columns(iC).HeaderText
                curCol += 1
            End If

        Next

        For I = 0 To rowsTotal
            curCol = 0
            For J = 0 To colsTotal
                DataGridView1.Rows(I).Visible = True
                .Cells(I + 2, curCol + 1).value = DataGridView1.Rows(I).Cells(J).Value
                curCol += 1
            Next J

        Next I

        .Rows("1:1").Font.FontStyle = "Bold"
        .Rows("1:1").Font.Size = 10
        .Cells.Columns.AutoFit()
        .Cells.Select()
        .Cells.EntireColumn.AutoFit()
        .Cells(1, 1).Select()


        excelWorksheet.SaveAs("E:\vbexcel.xlsx")
        xlapp.Quit()
        xlapp.Quit()

        releaseObject(xlapp)
        releaseObject(excelBook)
        releaseObject(excelWorksheet)

    End With

    MsgBox("You can find the file E:\vbexcel.xlsx")
    Dim res As MsgBoxResult
    res = MsgBox("Process completed, Would you like to open the file?", MsgBoxStyle.YesNo)
    If (res = MsgBoxResult.Yes) Then
        Process.Start("E:\vbexcel.xlsx")
    End If

End Sub

有没有一种方法可以使用宏来删除代码中的空行?

i=o的外部循环会遍历这些行,因此我会在该行的正下方添加If语句。如果If找到一个可见的行,您希望它传递,因此类似于If(DataGridView1.Rows[i].visible){…我在这里发布之前已经这样做了。它给了我一个空白的excel文件。只是想知道if语句代码出了什么问题。这也会使所有行可见,因为您正在为它们的可见属性赋值。在比较值时,尝试在表达式中使用==。在这种情况下,不必将可见与任何内容进行比较,因为它已经是布尔值了。If(DataGridView1.Rows[i].Visible)会这样做。您好。我尝试使用您的代码,但它给了我一个错误。将[i]更改为(i)可以解决错误,但在导出时会给我一个空白的excel文件。。不是在Visual Basic中,我知道这听起来很愚蠢(我来自c#背景),但如果x=True实际上会转换为If(x==True).是的,我在我的工作中从事it工作,花了一段时间才停止尝试将c#与之混合。就使用Excel Interop而言,这是一个令人毛骨悚然的问题。我似乎记得,这并不像将单元格(x,y)设置为特定值那么简单。可能缺少某些内容?或者我应该合并填充按钮(使行不可见的按钮)进入我的导出按钮?