DataGridview导出excel

本文介绍了一种使用C#将DataGridView控件中的数据导出到Excel文件的方法。该方法适用于已安装Microsoft Office的机器,通过实例化Excel应用程序对象,创建新的工作簿,并将DataGridView的数据逐行写入。此外,还提供了自动调整列宽的功能。

这个方法需要使用的机器安装有microsoft office软件,

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SqlClient;
using Microsoft.Internal.Performance;
using Microsoft.CSharp;

namespace WareHouse
{
    class ExitToExcel
    {
        public void exitToExcel(DataGridView DGV, string fileName)  //传入DGV与要导出的文件名作为参数
        {
            if (DGV.Rows.Count > 0)
            {

                string saveFileName = fileName;
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                saveDialog.FileName = saveFileName;
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消 
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)
                {
                    MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                    return;
                }

                Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1                                                                                                                    //写入标题
                for (int i = 0; i < DGV.ColumnCount; i++)
                {
                    worksheet.Cells[1, i + 1] = DGV.Columns[i].HeaderText;
                }
                //写入数值
                for (int r = 0; r < DGV.Rows.Count; r++)
                {
                    try
                    {
                        for (int i = 0; i < DGV.ColumnCount; i++)
                        {

                            worksheet.Cells[r + 2, i + 1] = Convert.ToString(DGV.Rows[r].Cells[i].Value.ToString());

                        }
                        System.Windows.Forms.Application.DoEvents();

                    }

                    catch
                    { }
                }
                worksheet.Columns.EntireColumn.AutoFit();//列宽自适应

                if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);
                      
                    }
                    catch (Exception ex)
                    {

                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }

                }

                xlApp.Quit();
                GC.Collect();
                System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
                MessageBox.Show("资料保存成功", "提示", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show("报表为空,无表格需要导出", "提示", MessageBoxButtons.OK);
            }
        }
    }
}

### 如何将 DataGridView 数据导出Excel 在 .NET 开发环境中,可以利用多种方式实现 `DataGridView` 中的数据导出Excel 文件的功能。以下是几种常见的方法及其代码示例。 #### 方法一:使用 EPPlus 库 EPPlus 是一种强大的工具库,用于处理 Open Office XML 格式的 Excel 文件 (`.xlsx`)。通过该库,开发者能够轻松创建复杂的电子表格并填充数据[^1]。 下面是一个简单的例子,展示如何将 `DataGridView` 的内容保存为 `.xlsx` 文件: ```csharp using System; using System.Data; using System.IO; using System.Windows.Forms; using OfficeOpenXml; public void ExportToExcel(DataGridView dataGridView, string filePath) { DataTable dataTable = new DataTable(); foreach (DataGridViewColumn column in dataGridView.Columns) dataTable.Columns.Add(column.Name); foreach (DataGridViewRow row in dataGridView.Rows) { DataRow dataRow = dataTable.NewRow(); foreach (DataGridViewCell cell in row.Cells) dataRow[cell.ColumnIndex] = cell.Value?.ToString() ?? ""; dataTable.Rows.Add(dataRow); } FileInfo fileInfo = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { var worksheet = package.Workbook.Worksheets.Add("Sheet1"); worksheet.Cells["A1"].LoadFromDataTable(dataTable, true); package.Save(); } } ``` 调用上述函数时需提供目标路径作为参数: ```csharp ExportToExcel(yourDataGridView, @"C:\path\to\yourfile.xlsx"); ``` --- #### 方法二:基于 CSV 导出 如果不需要高级功能或者兼容性要求较低,则可以选择简单地将数据存储为逗号分隔值 (CSV) 文件形式。这种方式无需额外依赖任何第三方组件即可完成操作。 下面是具体实现过程的一个实例演示: ```csharp private void SaveDataGridViewAsCsv(DataGridView dgv, string fileName) { StringBuilder sb = new StringBuilder(); // 添加列名 for(int colIdx = 0; colIdx < dgv.Columns.Count; colIdx++) { sb.Append(dgv.Columns[colIdx].HeaderText + ","); } sb.AppendLine(""); // 遍历每一行并将单元格中的值追加进去 foreach (DataGridViewRow dr in dgv.Rows) { if (!dr.IsNewRow) { for (int i = 0 ;i< dgv.Columns.Count;i++) sb.Append("\""+(dr.Cells[i].Value?? "").ToString().Replace("\"", "\"\"")+"\","); sb.AppendLine(""); } } File.WriteAllText(fileName,sb.ToString()); } // 调用此方法来执行实际的文件写入动作 SaveDataGridViewAsCsv(yourDataGridView,"output.csv"); ``` --- #### 方法三:Crystal Reports 报告生成器集成 虽然 Crystal Reports 主要被设计用来制作报表,但它同样支持输出成不同类型的文档格式,其中包括 Microsoft Excel 表格。因此也可以考虑采用这种方法来进行转换工作[^2]。 不过需要注意的是,这种方案通常适用于那些已经构建好模板结构的情况;而对于动态调整布局的需求可能不够灵活便捷。 --- 以上三种途径各有优劣之处,在选择适合自己的解决方案之前应当综合考量项目需求以及现有资源条件等因素后再做决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值