【原】winform高效导出Excel带格式设置

参考网上的方法修改,1000条记录导出只要3S(1GRDM,C2.8CPU).
1.项目添加excel对象类库的引用,Microsoft Excel 11.0 object library(不同版本的Excel,类库不同,这是2003的) 
2.代码

  1//-***************获取要写入excel的数据源***************
  2            Dao model=new Dao();
  3            DataTable dt=model.GetFileNameList(0,intPageSize,Convert.ToDateTime(dtPFrom.Value), Convert.ToDateTime(dtPTo.Value));//取得dataGrid绑定的DataSet
  4            if(dt==null) return;
  5            DataGridTableStyle ts = dataGrid1.TableStyles[0];
  6
  7
  8            //-***************获取excel对象***************
  9            string saveFileName="";
 10            bool fileSaved=false;
 11            SaveFileDialog saveDialog=new SaveFileDialog();
 12            saveDialog.DefaultExt ="xls";
 13            saveDialog.Filter="Excel文件|*.xls";
 14            saveDialog.FileName ="导入记录查询结果 "+DateTime.Today.ToString("yyyy-MM-dd");
 15            saveDialog.ShowDialog();
 16            saveFileName=saveDialog.FileName;
 17            if(saveFileName.IndexOf(":")<0) return; //被点了取消
 18            Excel.Application xlApp=new Excel.Application();
 19            if(xlApp==null)
 20            {
 21                MessageBox.Show("无法启动Excel,可能您的机子未安装Excel");
 22                return;
 23            }

 24            Excel.Workbook workbook = xlApp.Workbooks.Add(true);
 25            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];   
 26            Excel.Range range;
 27
 28       
 29            string oldCaption=dataGrid1.CaptionText;
 30            // 列索引,行索引,总列数,总行数                   
 31            int colIndex = 0;
 32            int RowIndex = 0;
 33            int colCount = ts.GridColumnStyles.Count;
 34            int RowCount=dt.Rows.Count;
 35           
 36
 37            // *****************获取数据*********************
 38            dataGrid1.CaptionVisible = true;
 39            dataGrid1.CaptionText = "正在导出数据";
 40            // 创建缓存数据
 41            object[,] objData = new object[RowCount + 1, colCount];
 42            // 获取列标题
 43            foreach(DataGridColumnStyle cs in ts.GridColumnStyles)
 44            {
 45                objData[RowIndex,colIndex++] = cs.HeaderText;   
 46            }

 47       
 48            // 获取具体数据
 49            for(RowIndex =1;RowIndex< RowCount;RowIndex++)
 50            {
 51                for(colIndex=0;colIndex < colCount;colIndex++)
 52                {               
 53                    objData[RowIndex,colIndex] =dt.Rows[RowIndex-1][colIndex+1];
 54                }

 55               
 56            }
   
 57
 58           //********************* 写入Excel*******************
 59               
 60            range = worksheet.get_Range(xlApp.Cells[2,1],xlApp.Cells[RowCount,colCount]);           
 61            range.Value2= objData;            
 62            Application.DoEvents();   
 63           
 64            //*******************设置输出格式******************************
 65             
 66            //设置顶部説明   
 67            range = worksheet.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,colCount]);
 68            range.MergeCells = true;
 69            range.RowHeight=38;
 70            range.Font.Bold=true;
 71            range.Font.Size=14;
 72            range.Font.ColorIndex=10;//字体颜色
 73            xlApp.ActiveCell.FormulaR1C1 = "导入记录查询结果";
 74
 75            //特殊数字格式
 76            range = worksheet.get_Range(xlApp.Cells[2,colCount],xlApp.Cells[RowCount,colCount]);
 77            range.NumberFormat="yyyy-MM-dd hh:mm:ss";
 78
 79            xlApp.Cells.HorizontalAlignment=Excel.Constants.xlCenter;   
 80            range = worksheet.get_Range(xlApp.Cells[2,1],xlApp.Cells[2,colCount]);
 81            range.Interior.ColorIndex = 10;//背景色
 82            range.Font.Bold = true;
 83            range.RowHeight=20;
 84            ((Excel.Range)worksheet.Cells[2,1]).ColumnWidth=25;
 85            ((Excel.Range)worksheet.Cells[2,2]).ColumnWidth=13;
 86            ((Excel.Range)worksheet.Cells[2,3]).ColumnWidth=18;
 87            ((Excel.Range)worksheet.Cells[2,4]).ColumnWidth=15;
 88            ((Excel.Range)worksheet.Cells[2,5]).ColumnWidth=22;
 89
 90            //***************************保存**********************
 91            dataGrid1.CaptionVisible = false;
 92            dataGrid1.CaptionText = oldCaption; 
 93            if(saveFileName!="")
 94            {
 95                try
 96                {
 97                    workbook.Saved =true;
 98                    workbook.SaveCopyAs(saveFileName);
 99                    fileSaved=true;
100                }

101                catch(Exception ex)
102                {
103                    fileSaved=false;
104                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n"+ex.Message);
105                }

106            }

107            else
108            {
109                fileSaved=false;
110            }

111            xlApp.Quit();
112            GC.Collect();//强行销毁   
113            TimeSpan dateEnd=new TimeSpan(DateTime.Now.Ticks);           
114            TimeSpan tspan=dateBegin.Subtract(dateEnd).Duration();
115            MessageBox.Show(tspan.ToString());
116            if(fileSaved && File.Exists(saveFileName))
117                System.Diagnostics.Process.Start(saveFileName);

转载于:https://www.cnblogs.com/Areas/archive/2012/08/07/2627039.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode 逗号不换行_来自一个插件的疯狂夸赞,VS Code「彩虹屁」插件问世,网友:我想要郭德纲版...

听说有人开发了「虚拟程序员鼓励师」&#xff0c;安装使用后的我疯狂捶墙&#xff0c;导致我家变成了单间。机器之心报道&#xff0c;机器之心编辑部。你可能从未想过&#xff0c;会有这么一个人&#xff1a;对你写的每一行代码都不吝夸赞&#xff0c;知道你什么时候想骂人&…

电压源和电流的关联参考方向_结点电压法解题系列之四:电流源支路

利用结点电压法求解时&#xff0c;有的结点之间连接的是电流源支路。如图1所示电路中&#xff0c;结点2与参考结点4之间连接的是5A电流源。对结点2列写标准形式KCL&#xff0c;或直接利用KCL列出结点电压方程&#xff0c;都很容易&#xff0c;也不易出错。只需要注意&#xff1…

狼人杀服务器紧急维护中,狼人杀最可怕的武器是那张嘴?禁言长老:你已被管理员禁言一天!...

语言的能力有多强&#xff1f;不论是用来攻击对手&#xff0c;或是讨好他人&#xff0c;讽刺或是欺骗&#xff0c;语言有着神秘的力量&#xff0c;仿佛能够颠倒黑白。对于那些"口吐芬芳"的人&#xff0c;更是恨不得在他嘴上贴个封条&#xff0c;让他好好安静一会。相…

炎炎夏日需要一个清凉的地 - 自制水冷系统(十一 指尖的思绪之程序篇)

前段时间接手了一个项目&#xff0c;所以DIY的进程有些停滞。实际编写的程序并没有多长时间&#xff0c;得益于Keil这个强大的IDE。能在第一次做51开发的时候&#xff0c;如此顺利的完成代码。不多说废话了&#xff0c;说明下代码的具体思路。具体思路根据&#xff08;八 系统设…

wordpress 后台慢_建站经验-wordpress用户注册收不到验证邮件

背景我的一个博客http://axuretop.com&#xff0c;已经在后台开放注册了&#xff0c;注册用户默认为“订阅者”。一旦发布新的文章&#xff0c;会订阅邮件给用户。后台有300多个订阅用户&#xff0c;但是发现评论文章的很少&#xff0c;严重怀疑他们无法订阅我的文章&#xff0…

ai字体行间距怎么调整_字体基础知识(一)

本期教程主要讲解字体基础知识&#xff1a;字体、字号、字形、字重、行高、行距、字间距、字偶间距。本文所用软件为Microsoft PowerPoint 2013。1 字体文字的风格样式&#xff0c;就是我们平时常说的黑体、宋体、楷体、Segoe UI Black、Courier New、Consolas。如下图所示&…

免费的crm系统部署在自己的服务器,crm系统本地部署与云端部署的区别

CRM系统的部署方式通常有三种模式&#xff0c;分别是&#xff1a;本地部署、云端部署、公有云部署等三种模式。通常企业在选择的部署方式是本地部署与云端部署。那么他们部署方式得区别是什么?本地部署CRM系统本地部署的CRM软件&#xff1a;是意味着保存在企业自身的服务器中。…

gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage

实现一个简单的基于码云(Gitee) 的 StorageIntro上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式&#xff0c;并立了一个 flag基于 github 或者 开源中国的码云实现一个 storage于是这两天就来填坑了。。实现了一个简单的基于开源中国的码云的 storage准备工作…

载波聚合或双连接的方式进行_智能电表常用远程抄表方式,您想知道吗?--老兵聊电之...

智能电表的远程抄表方式有多种方式&#xff0c;但老王更喜欢以下几种抄表方式&#xff0c;希望您能接受。一、智能电表的工作原理1.智能电表主要是由电子元器件构成&#xff0c;其工作原理是先通过对用户供电电压和电流的实时采样&#xff0c;再采用专用的电能表集成电路&#…

搞个服务器安装黑群晖系统,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS...

一、前言&#xff1a;大家好&#xff0c;俺又来了。这篇原创很早就在构思怎么写了&#xff0c;因为确实作为一个数码爱好者来说&#xff0c;当得知有 群晖 威联通 这种NAS 的东西存在的时候&#xff0c;就忍不住想体验体验。但是奈何自己的资金不够&#xff0c;想一想&#xff…

立体旋转查看图片

声明&#xff1a;如果程序有问题&#xff0c;请各位大虾多多指点&#xff0c;谢谢。 基于psoft.js制作的一款立体旋转查看图片应用 1.可以通过鼠标滑动来操作图片的旋转&#xff0c;可以向右&#xff0c;向左拖动 a。向左滑动 b。向右滑动 c。向左转到一下 2.代码实现&#xff…

asterisk架构

从架构的角度看来&#xff0c;Asterisk是由许多不同的模块组成的。在设计基于Asterisk的系统时&#xff0c;这种模块化的特性&#xff0c;提供了几乎无限的灵活必。作为Asterisk系统管理员&#xff0c;你拥有选择加载模块的权利。你所加载的每一个模块&#xff0c;都提供了不同…

esp虚拟服务器,esp8266接入云服务器

esp8266接入云服务器 内容精选换一换公有云平台提供的云监控&#xff0c;可以对云耀云服务器的运行状态进行日常监控。您可以通过管理控制台&#xff0c;直观地查看云耀云服务器的各项监控指标。云耀云服务器正常运行。关机、故障、删除状态的云耀云服务器&#xff0c;无法在云…

c++ primer 第六版 pdf_A3N630 塑壳断路器如何更换.pdf

太阳能单晶炉专用配套变压器&#xff0c;是我公司研发的生产太阳能单晶硅的单晶炉设备专用变压器&#xff0c;本产品作为太阳能单晶炉设备的配套产品&#xff0c;它将电网电源的三相380V电压转换成较低的三相交流50V电压&#xff0c;为加热提供电源&#xff0c;以得到设备加热所…

datareader对象直接转化为int_Integer、new Integer() 和 int 比较的面试题

作者&#xff1a;chenxiangxiang来源&#xff1a;https://www.cnblogs.com/cxxjohnson/p/10504840.html基本概念的区分&#xff1a;1、Integer 是 int 的包装类&#xff0c;int 则是 java 的一种基本数据类型2、Integer 变量必须实例化后才能使用&#xff0c;而int变量不需要3、…

个人推荐的SIP software Phone

开源免费的LinPhone&#xff0c;国内很多人基于他继续二次开发 http://www.linphone.org/ Zoiper 有免费的&#xff0c;有收费的&#xff0c;有SDK&#xff0c;支持SIP/IAX(没有NAT问题) 官方下载的免费版本里面就支持中文&#xff01; 免费版本支持&#xff1a;for Window…

_Linux中功能强大的截图工具 - Flameshot

Flameshot 是一款功能强大但易于使用的屏幕截图软件&#xff0c;中文名称火焰截图。Flameshot 简单易用并有一个 CLI 版本&#xff0c;所以你也可以从命令行来进行截图。Flameshot 是一个Linux发行版中完全免费且开源的截图工具。通常Linux发行版中会默认自带一个截图工具&…

jquery动画 -- 1.加载指示器

该系列文章是我阅读《jQuery 1.4 Animation Techniques》后的总结&#xff0c;有兴趣的朋友可以去看原版书籍。 动画效果对于丰富网站的交互体验起到了不可或缺的作用&#xff0c;他可以让你的站点更酷&#xff0c;更吸引人。 什么时候使用动画&#xff1a; 1.当显示或隐藏页面…

centos7 安装redis_Redis6安装(上) - 单机单实例

首先下载新版的redis6并且上传到centos7&#xff1a;安装redis需要gcc的环境&#xff0c;和以往老版本不同&#xff0c;这里的gcc需要高一点的版本。 yum install gcc-c随后升级gcc版本 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c…

手机输入法带拼音声调_word中拼音横向设置

前言在word编辑文字的时候&#xff0c;可以加注拼音&#xff0c;这对于陌生文字辨别读音非常有帮助&#xff0c;但是插入的拼音都是在文字上方的&#xff0c;那如果我们想要横向插入拼音的话&#xff0c;应该怎么操作呢&#xff1f;今天小编就给大家分享&#xff0c;在word中拼…