DataGridView导出excel

本文介绍了一种使用C#从DataGridView导出数据到Excel文件的方法,包括处理文件已存在的情况及导出过程中的细节。

本文参考网友江边孤岛(感谢原作者)的《WinForm中DataGrid扩展类 - 快速导出Excel文件,带保存对话框,并杀死进程。相对完美的解决方案!》(url:http://blog.youkuaiyun.com/jbgh608/archive/2007/08/29/1763517.aspx )而写,但本文是DataGridView导出Excel,DataGridView中的隐含列不导出。在贴出代码前几点说明如下:

1、添加Microsoft Excel 11.0 Object Library的引用后,在项目的引用列表中会多出3个引用项,分别是Excel、Microsoft.Office.Core、VBIDE;(当然添加Microsoft Word 11.0 Object Library的引用后,在项目的引用列表中也会多出3个引用项,分别是Word、Microsoft.Office.Core、VBIDE,即第一个是变化的,后两个是相同的,但如果你添加Microsoft Office 11.0 Object Library,那么仅有Microsoft.Office.Core)

微软的Office对象库包含:
Microsoft Access 11.0 Object Library
Microsoft Graph 11.0 Object Library
Microsoft Excel 11.0 Object Library
Microsoft Office 11.0 Object Library
Microsoft Outlook 11.0 Object Library
Microsoft PowerPoint 11.0 Object Library
Microsoft Word 11.0 Object Library

对于上面的对象库,微软是否提供了API文档?本人尚未找到。

2、文件是否已经打开的判断,网上很多是以独享的方式打开文件,如果出现异常则说明文件已经在使用中,我觉得这个判断不理想,不知道是否有更好的处理方法?

3、实测中发现执行设置Excel字体大小和将字体设置为粗体的语句耗时较长,不知道是本人机器环境的原因还是Excel的普遍问题?

4、原文杀死excel进程的处理方法并不得当,会将所有正在使用的excel都关闭掉。但导出excel确实会增加excel的进程,不妥。

一下是代码

调用方法为:

Export export  =   new  Export();
export.ToExcel(
this this .dgInOut,  " 收支账 " );

导出类源码:

using  System;
using  System.Collections.Generic;
using  System.Windows.Forms;
using  System.Text;
using  System.Diagnostics;
using  System.IO;
using  Microsoft.Office.Interop.Excel;

namespace  ST.FI
{
    
public class Export
    
{
        
//记录保存文件的名称(含路径)
        private string FullFileName = string.Empty;

        
保存对话框

        
导出Excel

        
杀死进程 
    }

}

### 如何将 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]。 不过需要注意的是,这种方案通常适用于那些已经构建好模板结构的情况;而对于动态调整布局的需求可能不够灵活便捷。 --- 以上三种途径各有优劣之处,在选择适合自己的解决方案之前应当综合考量项目需求以及现有资源条件等因素后再做决定。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值