C#导出dataGridView数据
方法一:导出为CSV文件(简单快速)
优点:无需依赖库,但格式简单。
private void ExportToCSV(DataGridView dataGridView, string filePath)
{
using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.UTF8))
{
// 写入列头
sw.WriteLine(string.Join(",", dataGridView.Columns.Cast<DataGridViewColumn>()
.Select(col => col.HeaderText)));
// 写入数据行
foreach (DataGridViewRow row in dataGridView.Rows)
{
sw.WriteLine(string.Join(",", row.Cells.Cast<DataGridViewCell>()
.Select(cell => cell.Value?.ToString()?.Replace(",", ";") ?? "")));
}
}
MessageBox.Show("导出成功!");
}
调用方法:
private void exportButton_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "CSV文件|*.csv";
if (saveDialog.ShowDialog() == DialogResult.OK)
{
ExportToCSV(dataGridView1, saveDialog.FileName);
}
}
catch (Exception exception)
{
MessageBox.Show("导出失败!");
}
}
方法二:使用EPPlus库(推荐,无需安装Excel)
优点:无需安装Microsoft Excel,支持.xlsx
格式,性能较好。
步骤:
安装EPPlus NuGet包
在Visual Studio中,通过NuGet包管理器安装EPPlus
:
using OfficeOpenXml;
using System.IO;
using System.Windows.Forms;
private void ExportToExcelWithEPPlus(DataGridView dataGridView, string filePath)
{
// 检查数据是否为空
if (dataGridView.Rows.Count == 0)
{
MessageBox.Show("没有数据可导出!");
return;
}
// 创建Excel包
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");
// 写入列头
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
worksheet.Cells[1, i + 1].Value = dataGridView.Columns[i].HeaderText;
}
// 写入数据行
for (int row = 0; row < dataGridView.Rows.Count; row++)
{
for (int col = 0; col < dataGridView.Columns.Count; col++)
{
object cellValue = dataGridView.Rows[row].Cells[col].Value;
worksheet.Cells[row + 2, col + 1].Value = cellValue?.ToString() ?? "";
}
}
// 自动调整列宽
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
// 保存文件
FileInfo excelFile = new FileInfo(filePath);
excelPackage.SaveAs(excelFile);
}
MessageBox.Show("导出成功!");
}
调用方法:
// 调用示例
private void btnExport_Click(object sender, EventArgs e)
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "Excel文件|*.xlsx";
if (saveDialog.ShowDialog() == DialogResult.OK)
{
ExportToExcelWithEPPlus(dataGridView1, saveDialog.FileName);
}
}