方法一:导出为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);}
}