【问题标题】:Export Data (including headers) from DataGridView to .xls file将数据(包括标题)从 DataGridView 导出到 .xls 文件
【发布时间】:2016-02-22 16:19:50
【问题描述】:

所以我正在尝试为记录数据添加“导出到 .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);
    }

【问题讨论】:

  • 你熟悉OpenXML吗?使用它比依靠使用ComInterop的缓慢而痛苦的过程更容易做到这一点我有一个实际发布的例子,说明如何使用@来做到这一点987654326@ 在此 SO 上通过网页发布回复 stackoverflow.com/questions/35351849/… 如果您不愿意使用第 3 方 dll,您可以非常快速地编写自己的解析器以将值写入逗号分隔文件并将其保存为 .CSV

标签: c# excel-interop


【解决方案1】:

我一直在用 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# 转换器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多