参考网上的方法修改,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

【原】winform高效导出Excel带格式设置相关推荐

  1. winform高效导出Excel带格式设置

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

  2. vue3.0导出excel带格式

    这个真的困扰了我整整一天,我尝试了xlxs file-saver两个组件的版本,怎么搞都不行 先不说vue3.0 不能import进来,只能require('xlxs'),require('file- ...

  3. POI导出EXCEL带水印 以及单元格格式设置

    客户提个需求,需要将报表导出 excel带水印 和 pdf带水印 2个版本. 做的时候连excel本身怎么带水印都不知道,更不用说用java了.后来在网上搜到了excel添加水印的2个方法. 1.艺术 ...

  4. POI 导出excel带小数点的数字格式显示不对解决方法

    POI 导出excel带小数点的数字格式显示不对解决方法 参考文章: (1)POI 导出excel带小数点的数字格式显示不对解决方法 (2)https://www.cnblogs.com/firstd ...

  5. Asp.net高效导出excel篇之Aspose导出excel

    上周在博客中写了一篇<Asp.net高效导出Excel篇>在发布之后收到很多热心网友的建议--使用Excel第三方引擎如NOPI.Aspose.cell等导出Excel,优点:效率高.不需 ...

  6. java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc

    JAVA的poi实现模版导出excel(带图片) 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel.但是使用jxl实现到处excel只能到 ...

  7. Hutool导出excel带前台Base64图片

    Hutool导出excel带前台Base64图片,hutool并没有封装具体方法,需要自己手动插入. @Data public class PicDto {private String chartBa ...

  8. asp导出EXCEL数字格式及自动适应宽度的问题

    asp导出EXCEL数字格式及自动适应宽度的问题 下面直接进行代码演示: <% If Response.IsClientConnected Then Response.Flush Else Re ...

  9. 动画图解:Excel字符格式设置

    动画图解:Excel字符格式设置 1.设置字体:选中需要设置字体的单元格(区域),鼠标按"格式"工具栏的"字体"框右侧的下拉按钮,在随后弹出的下拉列表中,选择需 ...

最新文章

  1. 周4早上搜索引擎分析 - crmim.com| MSCRM开发者之家
  2. Linux 中的动态链接库和静态链接库是干什么的?
  3. 【JavaScript】js数组与字符串的相互转换
  4. c++保存图标到dll_自动保存邮件附件至指定文件夹
  5. POJ-3590 The shuffle Problem 置换+DP | DFS
  6. A股开盘:深证区块链50指数涨0.94%,*ST晨鑫涨停
  7. MyBatis框架使用trim标签修改字段,查询字段
  8. Security+ 学习笔记26 业务连续性
  9. linux工作技能第二发:vi
  10. 计量经济学第六版伍德里奇计算机答案,求伍德里奇计量经济学答案第六版
  11. EasyPlayer.js H5播放器帮助我这种不会前端的普通用户也能轻松实现直播接入
  12. c语言汉诺塔递归算法
  13. 【2010.10.13 10:00 携程校招笔试】买可乐(50%)、派司机
  14. 以太网交换机可以家用吗_以太网交换机是什么? 以太网交换机的使用方法
  15. 关于gb2312编码的xml解析
  16. 宜搭产品生态伙伴政策——宜搭:高效的低代码应用构建平台
  17. 丽水松阳计算机职业高中学校,浙江省丽水市松阳县职专
  18. Flink SQL和Table编程和案例
  19. C++中的friend class 用法总结
  20. 合泰单片机AD转换Adc_Init.c

热门文章

  1. HDU1251 统计难题 trie树 简单
  2. [UVA 10891] Game of Sum
  3. 一款纯css3实现的超炫动画背画特效
  4. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...
  5. quill一些插件的配置 注意事项
  6. 基于B/S架构的故障模型
  7. npm i依赖版本兼容问题处理
  8. 鲲鹏920 centos7 postgresql12 postgis2.5.4编译
  9. 三维触控测试软件,10 条小技巧,告诉你 iPhone XS Max 的三维触控功能怎么用
  10. Abbirb120型工业机器人_ABB IRB 120工业机器人.pdf