使用该函数需要先Use Excel2010


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

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

  for I := 1 to CellsNames.Count do
begin
Range.Cells[2,I] := CellsNames.Names[I-1]; //需与DSet的Fields顺序保持一致
Range.Columns[I].ColumnWidth := CellsNames.Values[CellsNames.Names[I-1]];  //Excel文件中的单元格宽,单位为字符.
end; RecNo := DSet.RecNo;
DSet.DisableControls;
DSet.First;
while not DSet.Eof do
begin
for I := 1 to CellsNames.Count do
Range.Cells[DSet.RecNo + 2, I] := VarToStr(DSet.Fields[I-1].Value);
DSet.Next;
end;
DSet.RecNo := RecNo;
DSet.EnableControls; TmpPath := sysGetPath(HInstance) + 'xls\';    //sysGetPath=自定义函数,获取当前路径
if not DirectoryExists(TmpPath) then
ForceDirectories(TmpPath);
ExcelWorkSheet.SaveAs(TmpPath + FileName + '.xlsx'); ExcelWorkSheet.Disconnect;
ExcelWorkBook.Disconnect;
ExcelApp.Quit;    //这句比较重要,很多例子中没有这句,关闭后,进程中还是能够发现Excel进程没有关闭
ExcelApp.Disconnect;
FreeAndNil(ExcelWorkSheet);
FreeAndNil(ExcelWorkBook);
FreeAndNil(ExcelApp); if IsOpen then
sysExecuteFile(TmpPath + FileName + '.xlsx','','',0);
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. oracle用户具有的权限和角色

    如何查看一个oracle用户具有的权限和角色 1.查看所有用户: select * from dba_users; select * from all_users; select * from use ...

  2. Swift 延迟运行代码

    // // DelayRun.swift // // Created by XuQing on 16/7/1. // Copyright © 2016年 xuqing. All rights rese ...

  3. Linux实战教学笔记43:squid代理与缓存实践(二)

    第6章 squid代理模式案例 6.1 squid传统正向代理生产使用案例 6.1.1 squid传统正向代理两种方案 (1)普通代理服务器 作为代理服务器,这是SQUID的最基本功能:通过在squi ...

  4. 不同Hadoop模式下,Hive元数据文件存储位置

    假如在hive的配置文件hive-site.xml中,属性hive.metastore.warehouse.dir被设置为/root/hive/warehouse. 如果Hadoop是本地模式,则仓库 ...

  5. 心理学轨迹及AI基础理论读后感

    今天简单的看了下心理学轨迹及AI基础理论发现世界确实是那3%的人改变的,我等屁民还努力在红尘中争渡,下面简单记录下我刚看完的思路,算做个笔记给自己看.. 模型建立的最终结果可以解读所有的心理学现象,可 ...

  6. code3731 寻找道路

    将图反向,从终点spfa,把和终点没有联系的点找出来, 把它们和它们所连接的所有点删去(反向图) 然后再一遍spfa,输出最短路即可 代码: #include<iostream> #inc ...

  7. xargs在linux中的使用详解-乾颐堂

    xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤 ...

  8. Perl 学习笔记-正则表达式处理文本

    1.使用正则表达式替换文本  s///  s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...

  9. html传参数 js工具类

    var QueryUtils = { GetQueryString: function (name) { var reg = new RegExp("(^|&)" + na ...

  10. springboot+swagger集成

    一.swagger介绍 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容 ...