winfrom 快速 导出excel

2024-01-23 07:32
文章标签 excel 快速 导出 winfrom

本文主要是介绍winfrom 快速 导出excel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此方法比较快,500条8列的数据不到1秒

只需要给一个有数据的datagridview就可以了


private void ToExcel_Click(object sender, EventArgs e){SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = "Execl files (*.xls)|*.xlsx";sfd.FilterIndex = 0;sfd.RestoreDirectory = true;sfd.CreatePrompt = false;sfd.Title = "导出文件保存路径";if (sfd.ShowDialog() == DialogResult.OK){string path = sfd.FileName; //时间计算DateTime dt1 = DateTime.Now;saveAsExcel(path, dataGridView1);DateTime dt2 = DateTime.Now;MessageBox.Show("导出成功!共用了:" + (dt2 - dt1));}}//这个代码速度特别快,基本达到导出csv的速度public static void SaveAsExcel(string path, DataGridView gridView){if (gridView.RowCount > 65536){MessageBox.Show("当前表格中记录太多,不能导出excel(excel最多可以存储65536行记录)", "提示");//return;}try{saveAsExcel(path, gridView);System.GC.Collect();}catch (Exception ex){MessageBox.Show("导出excel时发生错误: " + ex.Message, "提示");System.GC.Collect();}}//上面的 SaveAsExcel 调用 saveAsExcel 的目,估计是为了解决 excel进程销毁的问题private static void saveAsExcel(string path, DataGridView gridView){object objMissing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();app.Visible = false;Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Add(objMissing);Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Worksheets[1];//以下3个对象在前面定义,为了能在异常中可以释放Microsoft.Office.Interop.Excel.Range ranges = null;Microsoft.Office.Interop.Excel.Range range = null;Microsoft.Office.Interop.Excel.Range head = null;try{for (int i = 0; i < gridView.Columns.Count; i++){//Microsoft.Office.Interop.Excel.Range head = (Microsoft.Office.Interop.Excel.Range)workSheet.Cells[1, i + 1];head = (Microsoft.Office.Interop.Excel.Range)workSheet.Cells[1, i + 1];head.Value2 = gridView.Columns[i].HeaderText;head = null;}//A2用于指定起始行的位置//Microsoft.Office.Interop.Excel.Range range = workSheet.get_Range("A2", objMissing);range = workSheet.get_Range("A2", objMissing);int rows = gridView.Rows.Count, cols = gridView.Columns.Count;//Microsoft.Office.Interop.Excel.Range ranges = range.get_Resize(rows, cols);ranges = range.get_Resize(rows, cols);object[,] datas = new object[rows, cols];for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){DataGridViewCell cell = gridView[j, i];if (typeof(string) == cell.ValueType){datas[i, j] = string.Format("'{0}", cell.FormattedValue);}else{datas[i, j] = cell.FormattedValue.ToString();}}}ranges.Value2 = datas;workBook.SaveAs(path, objMissing, objMissing, objMissing, objMissing, objMissing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, objMissing,objMissing, objMissing, objMissing, objMissing);}catch (Exception ex){throw (ex);}finally{workBook.Close(false, objMissing, objMissing);app.Quit();range = null;ranges = null;workBook = null;workSheet = null;app = null;}}

ps:此方法只是从网上找到的,地址已经不记得了。里面的注释什么的可能不一定对。但是整体方法肯定是可以的。

         这只是基于datagridview的导出,也没有sheet分页。如果想要其他的类型的,还要自己修改!



这篇关于winfrom 快速 导出excel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635652

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC