C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
时间: 2024-01-23 12:02:15 浏览: 86
C# DataGridView中数据导出到Excel
4星 · 用户满意度95%
好的,下面是将 DataGridView 中显示的数据导出到 Excel 的 C# 代码(处理大数据量时更加高效):
```csharp
private void ExportToExcel(DataGridView dataGridView, string filePath)
{
// 创建 Excel 应用程序实例
var excelApp = new Microsoft.Office.Interop.Excel.Application();
try
{
// 创建新的工作簿
var workbook = excelApp.Workbooks.Add(Type.Missing);
// 获取默认的工作表
var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;
// 设置工作表名称
worksheet.Name = "数据";
// 获取 DataGridView 列名
var columnNames = dataGridView.Columns.Cast<DataGridViewColumn>()
.Select(column => column.HeaderText)
.ToArray();
// 将列名写入第一行单元格
for (int i = 0; i < columnNames.Length; i++)
{
worksheet.Cells[1, i + 1] = columnNames[i];
}
// 获取 DataGridView 所有行数据
var data = (object[,])new object[dataGridView.RowCount, dataGridView.ColumnCount];
for (int row = 0; row < dataGridView.RowCount; row++)
{
for (int col = 0; col < dataGridView.ColumnCount; col++)
{
data[row, col] = dataGridView.Rows[row].Cells[col].Value;
}
}
// 将数据写入 Excel 中
var startRow = 2; // 第二行开始写入数据
var endRow = dataGridView.RowCount + 1; // 最后一行需要写入的行数
var endCol = dataGridView.ColumnCount; // 最后一列需要写入的列数
var range = worksheet.Range[worksheet.Cells[startRow, 1], worksheet.Cells[endRow, endCol]];
range.Value = data;
// 自动调整列宽
range.EntireColumn.AutoFit();
// 保存 Excel 文件
workbook.SaveAs(filePath);
}
catch (Exception ex)
{
MessageBox.Show("导出 Excel 文件失败:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
// 释放 Excel 应用程序实例
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
}
}
```
使用方法:
```csharp
ExportToExcel(dataGridView1, @"D:\data.xlsx");
```
其中,第一个参数是 DataGridView 控件,第二个参数是 Excel 文件保存路径。注意,在调用 ExportToExcel 方法之前,需要引用 Microsoft.Office.Interop.Excel 命名空间。
阅读全文