`

DataGridView导出到Excel文件

    博客分类:
  • C#
 
阅读更多
  针对上一篇复制DataGridView选中单元格复制到Excel中,将DataGridView中数据全部导出到Excel文件可能经要使用的更多。这是在练习一个项目里所写的,完全通过测试。
需要注意的是,在导出到Excel文件,一定要杀Excel的进程。杀进程的语法如下:


 
//杀Excel后台进程
  [DllImport("User32.dll", CharSet = CharSet.Auto)]
  public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int Pid);

   IntPtr intp=new IntPtr(xlApp.Hwnd); //得到excel的句柄,前题是excel对象已经创建

    int id=0;
   GetWindowThreadProcessId(intp, out id);
   System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id);
   P.Kill();


1,下面是主角DataGridView导出到Excel文件,如下:


    /// <summary>
            /// DataGridView中的所有数据导出到Excel
            /// </summary>
            /// <param name="ExportDgv">需要导出的DataGridView</param>
            /// <param name="fullFileName">导出后的文件全路径</param>
            /// <param name="isOpenFile">文件是否打开</param>
            /// <returns></returns>
            public bool OutputFileToExcel(DataGridView ExportDgv, string fullFileName, bool isOpenFile)
            {
                int id=0;
                bool ExportSuccess = false;

                int RowIndex = 0;
                int ColIndex = 0;
                //数据验证
                if (ExportDgv==null)
                {
                    return false;
                }
                if (ExportDgv.ColumnCount==0|| ExportDgv.RowCount==0)
                {
                    return false;
                }
                if (ExportDgv.RowCount > 65536 || ExportDgv.ColumnCount > 256)
                {
                    return false;
                }

               
                //有效的行数、列数
                int rowCount = ExportDgv.Rows.GetRowCount(DataGridViewElementStates.Visible);
                int colCount = ExportDgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);

                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)
                {
                    return false;
                }
                //创建Excel工作薄
                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
                //创建Excel工作表
                Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];//第1个工作表

                Microsoft.Office.Interop.Excel.Range range;

                IntPtr intp=new IntPtr(xlApp.Hwnd);

                //定义一个缓存,用来存放DataGridView的数据
                object[,] objData = new object[rowCount + 1, colCount];
                

                //1.存放DataGridView的列题行,隐藏列不要
                for (int i = 0; i < ExportDgv.Columns.Count; i++)
                {
                    if (ExportDgv.Columns[i].Visible)
                    {
                        objData[RowIndex, ColIndex++] = ExportDgv.Columns[i].HeaderText;//将列标题放入缓存中
                        
                        //设置成文本型
                        if (ExportDgv.Columns[i].ValueType.ToString()=="System.String")
                        {
                            range = xlSheet.get_Range(xlApp.Cells[1, ColIndex], xlApp.Cells[rowCount + 1, ColIndex]);
                            range.NumberFormat = "@";
                        }
                    }
                }
                //2.存放DataGridView中的数据,
                for (int i = 1; i < rowCount; i++)
                {
                    RowIndex++;
                    ColIndex = 0;
                    for (int j = 0; j < ExportDgv.Columns.Count; j++)
                    {
                        if (ExportDgv.Columns[j].Visible)
                        {
                            objData[RowIndex, ColIndex++] = ExportDgv[j, RowIndex - 1].Value;
                        }
                    }
                    System.Windows.Forms.Application.DoEvents();
                }
              
                //3.写入到Excel
                range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[rowCount + 1, colCount]);
                range.Value2 = objData;

                //保存
                try
                {
                    //设置文本表格的属性
                    xlApp.Cells.EntireColumn.AutoFit();//自动列宽
                    xlApp.Cells.VerticalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                    xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlLeft;
                    xlApp.ErrorCheckingOptions.BackgroundChecking = false;

                    //设置列头
                    range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, colCount]);//第一行数据,列标题
                    range.Font.Bold = true;
                    range.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                    xlBook.Save();
                    xlBook.SaveCopyAs(fullFileName);
                    ExportSuccess = true;

                }
                catch
                {
                    ExportSuccess = false;
                }
                finally
                {
                    //释放资源,关闭进程
                    xlApp.Quit();
                    GetWindowThreadProcessId(intp, out id);
                    System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id);
                    P.Kill();
                }
                if (isOpenFile) //打开文件,此处调用了项目中的对文件操作的一个组件                {
                    HR.Class.IO.FileOperat FP = new HR.Class.IO.FileOperat();
                    FP.OpenFile(fullFileName);
                }
                return ExportSuccess;
            }


2,方法的调用

     void 另存为Excel文件_Click(object sender, EventArgs e)
        {
            if (this.RowCount==0||this.ColumnCount==0)
            {
                return;
            }

            SaveFileDialog SFD = new SaveFileDialog();
            SFD.Filter = "Microsoft Excel电子文档(*.xls)|*.xls";
            if (SFD.ShowDialog()==DialogResult.OK)
            {
                this.Cursor = Cursors.WaitCursor;
                HR.Control.DataGridViewOperation.Operate.OutputOperate OO = new HR.Control.DataGridViewOperation.Operate.OutputOperate();
                OO.OutputFileToExcel(this, SFD.FileName, false);
                GC.Collect();
                this.Cursor = Cursors.Default;
            }
    

        }


 void 输出到Excel文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            HR.Control.DataGridViewOperation.Operate.OutputOperate OO = new HR.Control.DataGridViewOperation.Operate.OutputOperate();
            OO.OutputFileToExcel(this, System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\temp.xls", true);
        }
分享到:
评论

相关推荐

    C#-WinForm(2种dataGridView导出Excel)批量导出,高效率,36列万行,15秒

    本教程将详细讲解如何高效地将`dataGridView`中的数据批量导出到Excel文件,特别是针对大量数据(如36列和万行)的快速处理,目标是在15秒内完成操作。 首先,我们有两种方法可以实现这一功能: 1. **使用NPOI库**...

    C#DataGridView导出到Excel

    以下是对标题“C#DataGridView导出到Excel”及描述“C#DataGridView导出到Excel源代码设计”的深入解析,涵盖其关键实现技术与细节。 #### 一、引入必要的命名空间 要实现此功能,首先需要导入一系列命名空间,...

    c# 中 DataGridView导出成Excel文件

    其中,将 DataGridView 控件中的数据导出到 Excel 文件是一种常见的需求。下面将详细介绍如何通过 C# 实现这一功能。 #### DataGridView 控件简介 DataGridView 控件是 Windows Forms 中用于显示和编辑数据的强大...

    C#下成功登录后datagridview数据导出excel

    在这个场景中,"C#下成功登录后datagridview数据导出excel"的标题描述了一个常见的需求:用户通过登录窗口验证身份后,能够将数据显示在datagridview控件中,并且支持将这些数据导出到Excel文件中。这一过程涵盖了多...

    datagridview导入导出excel

    - 加载Excel文件到内存,使用`EPPlus.ExcelPackage.License.UseFreeLicense()`(如果需要许可证)。 - 读取工作表数据:`var worksheet = package.Workbook.Worksheets[0];`,然后转换为DataTable或List对象。 - ...

    DATAGRIDVIEW 导出到EXCEL

    而将`DataGridView`中的数据导出到Excel是常见的需求,这通常涉及到数据处理和文件格式转换。下面将详细阐述如何实现这个功能。 首先,我们需要了解`DataGridView`的基本用法。`DataGridView`控件可以动态加载数据...

    c# winform DataGridView导出数据到Excel中

    在C# Winform开发中,经常需要将DataGridView中的数据导出到Excel文件中,以便于用户进行进一步的数据处理或存档。根据提供的代码示例,我们可以将其分为两个主要部分:当前页数据的导出与全部数据的导出。 #### 二...

    C#将Datagridview中的数据导出到Excel表格实例

    6. **保存Excel文件**:最后一步是保存Excel文件到指定路径。 ```csharp if (saveFileName != "") { try { workbook.SaveCopyAs(saveFileName); } catch (Exception ex) { MessageBox.Show("保存文件时...

    C#Winform将DataGridView数据导出到Excel的两种方法

    在C# WinForm应用开发中,常常需要将DataGridView中的数据导出到Excel文件,以便于数据分析、存储或共享。本文将详细介绍两种实现这一功能的方法,这两种方法都经过了实际测试,确保可行。 **方法一:使用EPPlus库*...

    C#实现DataGridView转换为Excel(包括图片和文本)

    有时,我们可能需要将这些数据导出到Excel文件中,以便于数据分析、共享或打印。在C#中,实现这个功能可以通过使用第三方库或者.NET Framework自带的组件来完成。本教程将详细讲解如何使用C#将包含图片和文本的...

    C# DataGridView中数据导出到Excel

    本文将深入探讨如何使用C#将DataGridView中的数据导出到Excel文件,以及提供一个详细的实例源码分析。 首先,导出数据到Excel主要涉及两个步骤:创建Excel工作簿并填充数据。在C#中,我们可以使用Microsoft.Office....

    VB6 DataGrid中的数据导出到Excel

    3. 保存Excel文件:使用SaveAs方法保存Excel文件到指定的文件路径中。 知识点 1. 使用VB6将DataGridView中的数据导出到Excel文件中。 2. 使用CreateObject函数创建一个Excel应用程序对象。 3. 使用Workbooks.Open...

    datagridview 自动导出excel

    在.NET开发环境中,经常需要将数据从用户界面控件如DataGridView导出到Excel文件,以方便数据处理和分享。在本教程中,我们将探讨如何利用C#编程语言和Aspose.Cells库来实现这个功能,无需依赖Microsoft Office组件...

    DataGridView 添加图片 导出 excel 插入图片

    本篇将详细介绍如何在`DataGridView`中添加图片,并将其导出到`Excel`文件中,同时会涉及到C#编程语言中的图像处理和文件操作。 首先,要实现在`DataGridView`中添加图片,你需要创建一个自定义的`...

    WinForm 的DataGridView导出Excel

    总结,`WinForm`的`DataGridView`导出Excel功能涉及对`Microsoft.Office.Interop.Excel`库的使用,包括创建Excel应用程序、创建工作簿和工作表、写入数据以及保存文件等步骤。在实际开发中,还需要关注异常处理、...

    超强dataGridView 导出到Excel 类

    空间名为“whh” ,类中函数名tool_Excel.UpLoadExcel()中有3个参数,参数1:dataGridView对象,参数2:Excel文件存储路径(string),参数3:要创建的表名(string),超级好用,给大家分享。

    WinForm 把dataGridView中的数据导出到Excel

    将dataGridView中的数据导出到Excel可以帮助用户方便地保存和进一步处理数据。在Visual Studio 2005这样的开发环境中,我们可以使用多种方法实现这个功能。 首先,我们需要了解如何在C#或VB.NET中操作Excel。...

    DataGridView 通过NPOI导出Excel

    **使用NPOI导出`DataGridView`到Excel的步骤** 1. **安装NPOI NuGet包** 首先,你需要在Visual Studio中打开你的项目,然后通过NuGet包管理器安装NPOI库。这将自动添加所需的引用,使你能够使用NPOI的功能。 2. *...

    datagridview导出到excel

    要实现“datagridview导出到excel”的功能,你需要遵循以下步骤: 1. 引用必要的库:首先,你需要在项目中引用Microsoft.Office.Interop.Excel库,这个库提供了与Excel交互的接口。这可以通过右键点击项目 -&gt; 添加...

    C# datagridview 导出EXCEL

    本教程将详细介绍如何使用C#导出DataGridView中的数据到Excel文件。首先,我们需要理解几个关键概念和使用的技术。 1. **Microsoft Office Interop**: 这是微软提供的一套接口,允许.NET应用程序与Office应用程序...

Global site tag (gtag.js) - Google Analytics