• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DelphiExcel操作,写了个ADODataSet转Excel的函数作为后期学习的例子 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用该函数需要先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;

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB自定义函数Rodrigues发布时间:2022-07-18
下一篇:
Matlab与C++混合编程 1--在C++中调用自己写的matlab函数发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap