DataGridView 导出Excel (封装)

本文介绍了一种方法,可以将多个DataGridView控件的数据批量导出到一个Excel文件中,同时提供了将单个DataGridView导出的功能。代码使用了Microsoft.Office.Interop.Excel库来实现Excel文件的读写操作,包括设置工作表名称、写入标题、数值和调整列宽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DataGridView_Excel
{
    /// <summary>
    /// 先添加引用 Microsoft.Office.Interop.Excel(在.Net)
    /// </summary>
    public class DGVExcel
    {
        /// <summary>
        /// 将多个DataGridView 导入到一个Excel里
        /// </summary>
        /// <param name="dgvlist"></param>
        public void ALLdgvExportDataExcel(List<DataGridView> dgvlist)
        {
            if (dgvlist.Count > 0)
            {
                string fileName = "";
                string saveFileName = "";
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                saveDialog.FileName = fileName;
                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);
                for (int i = 0; i < dgvlist.Count; i++)
                {
                    //取得sheet 
                    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
                    worksheet.Name = dgvlist[i].Name;

                    //worksheet写入标题             
                    for (int j = 0; j < dgvlist[j].ColumnCount; j++)
                    {
                        worksheet.Cells[1, j + 1] = dgvlist[i].Columns[j].HeaderText;
                    }

                    //worksheet写入数值
                    for (int r = 0; r < dgvlist[i].Rows.Count; r++)
                    {
                        for (int k = 0; k < dgvlist[i].ColumnCount; k++)
                        {
                            worksheet.Cells[r + 2, k + 1] = dgvlist[k].Rows[r].Cells[k].Value;
                        }

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

                    //列宽自适应
                    worksheet.Columns.EntireColumn.AutoFit();
                }
                MessageBox.Show(fileName + "保存成功!", "提示", MessageBoxButtons.OK);
                if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);  //fileSaved = true;                 
                    }
                    catch (Exception ex)
                    {
                        //fileSaved = false;                      
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }
                }

                xlapp.Quit();

                //强行销毁(强制回收) 
                GC.Collect();
            }
        }

        /// <summary>
        /// 将一个DataGridView导入Excel
        /// </summary>
        /// <param name="dgv"></param>
        public void OnedgvExportDataExcel(DataGridView dgv)
        {
            string fileName = "";
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "xls";
            saveDialog.Filter = "Excel文件|*.xls";
            saveDialog.FileName = fileName;
            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);

            //取得sheet1 
            Microsoft.Office.Interop.Excel.Worksheet worksheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
            worksheet1.Name = dgv.Name;

            //worksheet1写入标题             
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                worksheet1.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
            }

            //worksheet1写入数值
            for (int r = 0; r < dgv.Rows.Count; r++)
            {
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    worksheet1.Cells[r + 2, i + 1] = dgv.Rows[r].Cells[i].Value;
                }

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

            //列宽自适应
            worksheet1.Columns.EntireColumn.AutoFit();
            MessageBox.Show(fileName + "保存成功!", "提示", MessageBoxButtons.OK);
            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);  //fileSaved = true;                 
                }
                catch (Exception ex)
                {
                    //fileSaved = false;                      
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                }
            }

            xlapp.Quit();

            //强行销毁(强制回收) 
            GC.Collect();    
        }
    }
}

 

转载于:https://www.cnblogs.com/yuanshuo/p/11528232.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值