将当前 DataGridView 行复制到 Excel

Copy Current DataGridView Row Into Excel

我正在尝试将当前行从 DataGridView 复制到 Excel,但似乎无法找到正确的语法来工作。希望有人能帮我解决下面的代码。

提前致谢。

    Public Sub CopyRowToExcel()

        Dim xlApp As Excel.Application
        Dim WB As Excel.Workbook
        Dim WS As Excel.Worksheet
        Dim LR As Integer
        Dim RowNum As Integer

        xlApp = GetObject(, Constants.ExcelApp)
        WB = xlApp.Workbooks("Products")
        WS = WB.Sheets("DataSheet")

        LR = WS.Range("A" & WS.Rows.Count).End(Excel.XlDirection.xlUp).Row + 1
        RowNum = DataGridView1.CurrentRow.Index

        WS.Range("A" & LR & ":L" & LR).Value = DataGridView1.Rows(RowNum).Cells(1 To 12).Value

    End Sub

你不说网格是否有数据源。如果您没有网格的数据源,那么我建议您使用一个。它会在很多方面让事情变得更简单,这就是一个例子。

假设网格有一个 DataTable 作为一个 DataSource,那么你应该能够将整行写入 Excel 文件,类似于你所要求的…

DataGridView1.Rows(RowNum).Cells(1 To 12).Value

当您在 Excel 中设置范围值时,例如...

WS.Range("A" & LR & ":L" & LR).Value =

...只要“=”的右侧是相同维度的数组就可以工作。在这种情况下,范围是“单个”行,则数组需要是一 (1) 维数组。然后,如果范围大于数组,它将用类似……“#N/A”的东西填充缺少的数组部分……如果范围小于数组的大小,那么它将忽略数组中的额外值。

如果范围维数与数组维数不一样……会报错。

因此,如果网格使用 DataTable 并且您想将所选行附加到现有工作表的末尾,那么您应该能够执行类似...

Dim excelRange As String = "A" & LR & ":L" & LR
Dim drv As DataRowView = DataGridView1.SelectedRows(0).DataBoundItem
xlWorksheet.Range(excelRange, Type.Missing).Value2 = drv.Row.ItemArray.ToArray()

在我的小测试中,这按上述方式工作。