将数据(包括标头)从 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);
}
我一直
在使用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# 转换器。