将数据(包括标头)从 DataGridView 导出到.xls文件

本文关键字:xls 文件 DataGridView 数据 包括标 | 更新日期: 2023-09-27 18:35:39

所以我正在尝试为记录数据添加"导出到.XLS"选项。我有以下代码段用于处理从 DataGridView 导出数据,但是当它打开 Excel 文件而不是存在的数据时,单元格 A1 仅包含字符串"System.Drawing"。

谁能指出我做错了什么?谢谢。

    private void copyGridToClipboard(DataGridView dg)
    {
        dg.SelectAll();
        dg.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
        DataObject dataObj = dg.GetClipboardContent();
        if (dataObj != null)
            Clipboard.SetDataObject(dataObj);
    }
    private void myButton_Click(object sender, EventArgs e)
    {
        copyGridToClipboard(myDataGridView);
        Excel.Application xlexcel;
        Excel.Workbook xlWorkbook;
        Excel.Worksheet xlWorksheet;
        object misValue = System.Reflection.Missing.Value;
        xlexcel = new Excel.Application();
        xlexcel.Visible = true;
        xlWorkbook = xlexcel.Workbooks.Add(misValue);
        xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
        Microsoft.Office.Interop.Excel.Range CR = (Excel.Range)xlWorksheet.Cells[1, 1];
        CR.Select();
        xlWorksheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);
    }

将数据(包括标头)从 DataGridView 导出到.xls文件

我一直

在使用DevExpress GridView执行此操作,所以我不确定它与DataGridView有何不同,但我通常从数据源获取数据表,然后将其转换为数组并直接设置范围的值。以下是一些可能有效的 VB.Net。

Dim dt As DataTable = (DirectCast(DataGridView1.DataSource, DataTable))
'convert to array
Dim columnCount As Integer = dt.Columns.Count - 1
Dim dataArray(dt.Rows.Count, columnCount) As Object
For columnIndex As Integer = 0 To columnCount
    dataArray(0, columnIndex) = dt.Columns(columnIndex).Caption
Next columnIndex
For rowIndex As Integer = 0 To dt.Rows.Count - 1
    For columnIndex As Integer = 0 To columnCount
        dataArray(dt.Rows.Count, columnIndex) = dt.Rows(rowIndex)(columnIndex)
    Next columnIndex
Next

'import to excel sheet
Dim lastRow As Integer = dataArray.GetLength(0) + 1
Dim lastColumn As Integer = dataArray.GetLength(1) + 1
Dim cellRange As Excel.Range = xlWorksheet .Range(xlWorksheet .Cells(1, 1), xlWorksheet .Cells(lastRow, lastColumn))
cellRange.Value = dataArray

您可以从 DataGridView 中直接获取数据作为数组,但我不熟悉它。此代码应该能够通过 VB -> C# 转换器。