尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Winform程序中将datagridview导出到excel (推荐)

Winform程序中将datagridview导出到excel (推荐)
📅 发布时间:2026/6/19 21:31:24

使用DEEPSEEK推荐的导出方法,好的很!

用前要用nuget 安装 ClosedXML 插件包

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ClosedXML.Excel;
namespace drp.Common
{public class ExcelIO{public void ExportWithClosedXML(DataGridView dgv){using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "Excel Files|*.xlsx" }){if (sfd.ShowDialog() == DialogResult.OK){using (XLWorkbook wb = new XLWorkbook()){var ws = wb.Worksheets.Add("Sheet1");// 导出列头for (int i = 0; i < dgv.Columns.Count; i++){// 使用 SetValue 方法避免类型错误ws.Cell(1, i + 1).SetValue(dgv.Columns[i].HeaderText);}// 导出数据for (int i = 0; i < dgv.Rows.Count; i++){// 跳过新行(如果允许添加行)if (dgv.Rows[i].IsNewRow) continue;for (int j = 0; j < dgv.Columns.Count; j++){var cellValue = dgv.Rows[i].Cells[j].Value;// 处理空值if (cellValue == null || cellValue == DBNull.Value){ws.Cell(i + 2, j + 1).SetValue(string.Empty);}else{// 根据数据类型设置值if (dgv.Columns[j].ValueType == typeof(DateTime)){ws.Cell(i + 2, j + 1).SetValue((DateTime)cellValue);ws.Cell(i + 2, j + 1).Style.DateFormat.Format = "yyyy-mm-dd";}else if (IsNumericType(dgv.Columns[j].ValueType)){ws.Cell(i + 2, j + 1).SetValue(Convert.ToDouble(cellValue));}else{ws.Cell(i + 2, j + 1).SetValue(cellValue.ToString());}}}}for (int i = 0; i < dgv.Columns.Count; i++){// 获取DataGridView列的宽度(像素)int colWidth = dgv.Columns[i].Width;// 计算Excel列宽double excelWidth = (colWidth / 7.0) + 1;// 设置最小和最大宽度限制if (excelWidth < 2) excelWidth = 2;if (excelWidth > 50) excelWidth = 50;// 设置Excel列宽ws.Column(i + 1).Width = excelWidth;// 如果内容比列宽更宽,则自动调整列宽if (ws.Column(i + 1).Width < ws.Column(i + 1).CellsUsed().Max(c => c.Value.ToString().Length) * 0.8){ws.Column(i + 1).AdjustToContents();}}// 自动调整列宽
                        ws.Columns().AdjustToContents();wb.SaveAs(sfd.FileName);}MessageBox.Show("导出成功!");}}}public void ExportToExcel(DataGridView dgv){using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "Excel Files|*.xlsx" }){if (sfd.ShowDialog() == DialogResult.OK){using (XLWorkbook wb = new XLWorkbook()){var ws = wb.Worksheets.Add("Sheet1");// 创建数据表var dataTable = new System.Data.DataTable();// 添加列头foreach (DataGridViewColumn column in dgv.Columns){dataTable.Columns.Add(column.HeaderText);}// 添加数据行foreach (DataGridViewRow row in dgv.Rows){if (row.IsNewRow) continue;var dataRow = dataTable.NewRow();foreach (DataGridViewCell cell in row.Cells){dataRow[cell.ColumnIndex] = cell.Value ?? DBNull.Value;}dataTable.Rows.Add(dataRow);}// 批量插入数据(从第一行第一列开始)ws.Cell(1, 1).InsertTable(dataTable);// 设置列宽for (int i = 0; i < dgv.Columns.Count; i++){// 获取DataGridView列的宽度(像素)int colWidth = dgv.Columns[i].Width;// 计算Excel列宽double excelWidth = (colWidth / 7.0) + 1;// 设置最小和最大宽度限制if (excelWidth < 2) excelWidth = 2;if (excelWidth > 50) excelWidth = 50;// 设置Excel列宽ws.Column(i + 1).Width = excelWidth;// 如果内容比列宽更宽,则自动调整列宽if (ws.Column(i + 1).Width < ws.Column(i + 1).CellsUsed().Max(c => c.Value.ToString().Length) * 0.8){ws.Column(i + 1).AdjustToContents();}}wb.SaveAs(sfd.FileName);}MessageBox.Show("导出成功!");}}}public void Export(DataGridView dgv){using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "Excel Files|*.xlsx" }){if (sfd.ShowDialog() == DialogResult.OK){using (XLWorkbook wb = new XLWorkbook()){var ws = wb.Worksheets.Add("Sheet1");// 创建数据表var dataTable = new DataTable();// 添加列头并设置数据类型foreach (DataGridViewColumn column in dgv.Columns){// 使用DataGridView列的数据类型(如果可用)Type dataType = column.ValueType ?? typeof(object);dataTable.Columns.Add(column.HeaderText, dataType);}// 添加数据行foreach (DataGridViewRow row in dgv.Rows){if (row.IsNewRow) continue;var dataRow = dataTable.NewRow();foreach (DataGridViewCell cell in row.Cells){if (cell.Value == null || cell.Value == DBNull.Value){// 根据列的数据类型设置默认值if (dataTable.Columns[cell.ColumnIndex].DataType == typeof(string)){dataRow[cell.ColumnIndex] = "";}else if (IsNumericType(dataTable.Columns[cell.ColumnIndex].DataType)){dataRow[cell.ColumnIndex] = 0;}else{dataRow[cell.ColumnIndex] = DBNull.Value;}}else{dataRow[cell.ColumnIndex] = cell.Value;}}dataTable.Rows.Add(dataRow);}// 批量插入数据(从第一行第一列开始)var tableRange = ws.Cell(1, 1).InsertTable(dataTable);// 设置列宽for (int i = 0; i < dgv.Columns.Count; i++){int colWidth = dgv.Columns[i].Width;double excelWidth = (colWidth / 7.0) + 1;if (excelWidth < 2) excelWidth = 2;if (excelWidth > 50) excelWidth = 50;ws.Column(i + 1).Width = excelWidth;}// 关键:设置数值列的格式为数字for (int i = 0; i < dgv.Columns.Count; i++){if (IsNumericType(dataTable.Columns[i].DataType)){// 设置整列为数字格式ws.Column(i + 1).Style.NumberFormat.Format = "#,##0.00";// 对于整数类型,去掉小数部分if (dataTable.Columns[i].DataType == typeof(int) ||dataTable.Columns[i].DataType == typeof(long)){ws.Column(i + 1).Style.NumberFormat.Format = "#,##0";}}}wb.SaveAs(sfd.FileName);}MessageBox.Show("导出成功!");}}}// 辅助方法:检查是否为数值类型private bool IsNumericType(Type type){switch (Type.GetTypeCode(type)){case TypeCode.Byte:case TypeCode.SByte:case TypeCode.UInt16:case TypeCode.UInt32:case TypeCode.UInt64:case TypeCode.Int16:case TypeCode.Int32:case TypeCode.Int64:case TypeCode.Decimal:case TypeCode.Double:case TypeCode.Single:return true;default:return false;}}}
}

 

活到老,学到老。

相关新闻

  • 第二章Pycharm和Jupiter
  • 微服务基础3-服务保护与分布式事务 - 详解
  • 剖析布谷相亲婚恋交友app源码之关键论述

最新新闻

  • Kimi K2.5深度解析:多模态原生与蜂群智能体架构
  • 防御Sweet32与POODLE攻击:Nginx/Apache TLS安全配置实战指南
  • QMCDecode解决方案:解锁QQ音乐加密格式,实现音频文件自由播放
  • SCMP报考条件详解——学历和工作经验要求 - 众智商学院课程中心
  • DeepSeek V4硬件适配实录:昇腾910B与H100双轨训练逻辑
  • SAP BOM查询实战:从正查到反查的完整指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号