使用该函数需要先Use Excel2010


  1. //DataSet导出Excel2010格式
    //FileName=待导出的Excel的文件名,不带路径以及后缀;TitleLine1=导出后Excel第一表头,TitleLine2=Excel第二表头;CellsNames=Excel表格中Field的Title名称;
    //IsOpen=是否马上打开
  2. procedure sysDSetToXlsx(DSet: TADODataSet;FileName,TitleLine1,TitleLine2:String;
  3. CellsNames: TStringList; IsOpen: Boolean = False);      
  4. var
  5. ExcelApp: TExcelApplication;
  6. ExcelWorkBook: TExcelWorkbook;
  7. ExcelWorkSheet: TExcelWorksheet;
  8. Range: OleVariant;
  9. I,RecNo: Integer;
  10. TmpPath: string;
  11. begin
  12. try
  13. ExcelApp := TExcelApplication.Create(nil);
  14. ExcelWorkBook := TExcelWorkbook.Create(nil);
  15. ExcelWorkSheet := TExcelWorksheet.Create(nil);
  16. except
  17. msgRaise('没有安装office 2007或以上版本,请安装后再试');
  18. end;
  19. //创建Excel
  20. ExcelApp.Connect;
  21. ExcelApp.Workbooks.Add(null,0);
  22. ExcelWorkBook.ConnectTo(ExcelApp.Workbooks[1]);
  23. ExcelWorkSheet.ConnectTo(ExcelWorkBook.Worksheets[1] as _WorkSheet);
  24. //构造Excel表头
  25. Range := ExcelApp.Range[ExcelWorkSheet.Cells.Item[1,1],ExcelWorkSheet.Cells.Item[2,CellsNames.Count]];
  26. Range.MergeCells := True;
  27. Range.Font.Size := 18;
  28. Range.Font.Bold := True;
  29. Range.HorizontalAlignment := 3;   //横向居中,此处如果使用xlCenter报“类Range” 错误 
  30. Range.VerticalAlignment := 2;    //竖向居中,此处如果使用xlCenter报“类Range” 错误
  31. Range.RowHeight := 40;
  32. Range.Cells[1,1] := TitleLine1; //表头第一行
  33.  
  34. Range := ExcelApp.Range[ExcelWorkSheet.Cells.Item[3,1],ExcelWorkSheet.Cells.Item[3,CellsNames.Count]];
  35. Range.MergeCells := True;      //合并
  36. Range.Font.Size := 10;
  37. Range.Font.Bold := True;
  38. Range.HorizontalAlignment := 4;  //同上错误
  39. Range.VerticalAlignment := 2;   //同上错误 
  40. Range.RowHeight := 20;
  41. Range.Cells[1,1] := TitleLine2; //表头第二行

  Range.Cells[3,1].Select;            //此处两行代码用于冻结头两行
  ExcelApp.ActiveWindow.FreezePanes := True;

  1. for I := 1 to CellsNames.Count do
  2. begin
  3. Range.Cells[2,I] := CellsNames.Names[I-1]; //需与DSet的Fields顺序保持一致
  4. Range.Columns[I].ColumnWidth := CellsNames.Values[CellsNames.Names[I-1]];  //Excel文件中的单元格宽,单位为字符.
  5. end;
  6.  
  7. RecNo := DSet.RecNo;
  8. DSet.DisableControls;
  9. DSet.First;
  10. while not DSet.Eof do
  11. begin
  12. for I := 1 to CellsNames.Count do
  13. Range.Cells[DSet.RecNo + 2, I] := VarToStr(DSet.Fields[I-1].Value);
  14. DSet.Next;
  15. end;
  16. DSet.RecNo := RecNo;
  17. DSet.EnableControls;
  18.  
  19. TmpPath := sysGetPath(HInstance) + 'xls\';    //sysGetPath=自定义函数,获取当前路径
  20. if not DirectoryExists(TmpPath) then
  21. ForceDirectories(TmpPath);
  22. ExcelWorkSheet.SaveAs(TmpPath + FileName + '.xlsx');
  23.  
  24. ExcelWorkSheet.Disconnect;
  25. ExcelWorkBook.Disconnect;
  26. ExcelApp.Quit;    //这句比较重要,很多例子中没有这句,关闭后,进程中还是能够发现Excel进程没有关闭
  27. ExcelApp.Disconnect;
  28. FreeAndNil(ExcelWorkSheet);
  29. FreeAndNil(ExcelWorkBook);
  30. FreeAndNil(ExcelApp);
  31.  
  32. if IsOpen then
  33. sysExecuteFile(TmpPath + FileName + '.xlsx','','',0);
  34. end;

  

Delphi Excel操作,写了个ADODataSet转Excel的函数作为后期学习的例子的更多相关文章

  1. 【Python】Excel操作-2 (07版本以下Excel操作,其实不怎么用了,麻蛋,预习了2天课间才发现,还说怎么跟老师讲的不一样)

    #保存修改Excel import xlrd from xlutils.copy import copy #打开Excel文档并将内容读取到内存 readbook=xlrd.open_workbook ...

  2. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  3. Delphi Excel 操作大全

    Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...

  4. Delphi 如何操作Excel

    摘自:http://wenjieshiyu.blog.163.com/blog/static/10739413201072033115869/ 个人收藏:Delphi  控制Excel(一) 使用动态 ...

  5. Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能

    4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...

  6. python语言(六)mock接口开发、发邮件、写日志、新Excel操作

    一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...

  7. NPOI操作EXCEL(六)——矩阵类表头EXCEL模板的解析

    哈哈~~~很高兴还活着.总算加班加点的把最后一类EXCEL模板的解析做完了... 前面几篇文章介绍了博主最近项目中对于复杂excel表头的解析,写得不好,感谢园友们的支持~~~ 今天再简单讲诉一下另一 ...

  8. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  9. python excel操作

    python操作excel表格(xlrd/xlwt)转载:http://www.cnblogs.com/zhoujie/p/python18.html   最近遇到一个情景,就是定期生成并发送服务器使 ...

随机推荐

  1. 经典CNN模型计算量与内存需求分析

    表1 CNN经典模型的内存,计算量和参数数量对比 AlexNet VGG16 Inception-v3 模型内存(MB) >200 >500 90-100 参数(百万) 60 138 23 ...

  2. [Z]用subcaption包排版子图(表)与图(表)格式设置

    很不错的一篇文章,可以进一步参考caption和subcaption的文档: http://www.peteryu.ca/tutorials/publishing/latex_captions

  3. Netty生产级的心跳和重连机制

    今天研究的是,心跳和重连,虽然这次是大神写的代码,但是万变不离其宗,我们先回顾一下Netty应用心跳和重连的整个过程: 1)客户端连接服务端 2)在客户端的的ChannelPipeline中加入一个比 ...

  4. Spring Boot实践——Filter实现

    Filter介绍 Filter是Servlet规范规定的,不属于spring框架,也是用于请求的拦截.但是它适合更粗粒度的拦截,在请求前后做一些编解码处理.日志记录等. 一个Filter包括:1).在 ...

  5. javaWeb 开发的成长路线

    感觉最近技术到了一个瓶颈,好长时间没有感觉进步了,本着活到老学到老的态度,笔者就去逛了下,看看前辈们写的文章,觉得他们写的非常不错,在这里特别贴出一张特别值得收藏的图片,不是说其他总结的图片不值得收藏 ...

  6. kibana-4.6.3-linux-x86_64.tar.gz的安装(图文详解)(升级)

     前期博客 kibana-4.6.3-linux-x86_64.tar.gz的下载(图文详解) 因为,我的机器情况是如下: 1.上传 [hadoop@master app]$ rz [hadoop@m ...

  7. properties 中文乱码问题的解决

    在用properties处理配置信息时,发现有时出现中文乱码的问题,后经查资料得知是由于编码不一致引起的.于是解决之. [原理解释] 我们用 API操作properties文件,如果获取的属性值是中文 ...

  8. Linux内核SPI支持概述

    1. 什么是SPI? Serial Peripheral Interface是一种同步4线串口链路,用于连接传感器.内存和外设到微控制器.他是一种简单的事实标准,还不足以复杂到需要一份正式的规范.SP ...

  9. 我的MBTI性格测试

    写在前面: 很多人争论MBTI靠谱不靠谱.一个人的性格肯定不能只用这么几个维度就能描述的,一个人的性格也肯定不是通过这么几个问题就能测出来的,一个人的性格也肯定不是一成不变的,所以MBTI的准确度肯定 ...

  10. 【hdu6148】Valley Numer【数位dp模板题】

    题意 对于每组数据给出一个整数n(length(n)<=100),找出不大于n的数字中有多少是Valley Numer.对于Valley的定义是它每一位的数字要么是递增,要么是递减,要么是先递减 ...