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

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. Windows server2012虚拟机 密码重置
  2. Google App Engine(GAE)入门教程翻译
  3. DLL load failed: The specified module could not be found
  4. nginx 访问控制之deny allow
  5. 还有Html.EditorFor和Html.Html.TextBox到底差什么呢
  6. 抢坐公司网盘首位,谁才是最大蛋糕受益者?
  7. JMetro 5.5版发布
  8. Swift 在 GAIA 平台云端一体化的探索
  9. freebsd查询php5的版本,FreeBSD下查看各软件版本命令
  10. 平台卖家要不要做独立站?
  11. JVM对象内存分配机制之对象在Eden区分配(五)
  12. 使用dll查看器dll文件中的内容
  13. 美团实习生C++后台
  14. PS学习总结三:修图必备的高阶操作
  15. 实验一 第1关:从自然数中取3个数进行组合之循环算法
  16. Python爬虫下载QQ音乐网站歌曲
  17. docker 运行 web 服务和部署 Go web app
  18. 什么是测试环境?如何搭建测试环境?
  19. snowboy嵌入式_编译配置SNOWBOY
  20. 高效处理NPE(空指针)异常的方法(一)

热门文章

  1. android 点击状态栏,“点击状态栏回到顶部”功能的消失原因和实现
  2. 百度地图SDK for Android【覆盖物】
  3. 【码农开店连载记】-- 0 开坑啦
  4. 嵌入式Linux(十三)RTC实时时钟
  5. 尺取法 — 详解 + 例题模板(全)
  6. #前端开发我们应该具备的硬核技能
  7. 小伙伴面试之成都创宇知道
  8. 百度地图查看导航记录,导航路线,记录驾驶路线
  9. python文件操作和绘制曲线
  10. 如何把pdf翻译成中文?