




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DxDbGrid与DbGridEh表格使用及导出Excel 分类: Delphi 2011-05-16 09:47 110人阅读 评论(0) 收藏 举报 前言:二者都是非常不错的第三方表格控件,都可实现多表头的表格及分组汇总功能;在导出 Excel 方面,个人觉得 DxDbGrid 做的比 DbGridEh 出色,几乎是 Grid 原样导出, DbGridEh 导出表格模式的单元格与 Grid 显示有所出入。 一、所用版本及安装: 1 、版本: DevExQuantumGrid v3.22 Pro for D7 、 EhLib 5.2.84 2 、安装: DevExQuantumGrid 直接 Setup.exe 就 OK ; EhLib 在 Delphi7 的安装稍微啰嗦点,具体步骤参考 readme.txt 或如下步骤: (1). 将 EhLib 5.2.84 解压缩到目标目录。 (2). 打开 Delphi 7 ,将 EhLib 的 /Delphi7 子目录加到 Delphi 的 Library path 。 ( 菜单操作路径为: Tools|Environment Options.|Library|Library path) (3). 将 EhLib 目标安装目录中的 common 和 DataService 子目录的文件移动到 EhLib 的 /Delphi7 子目录中。 (4). 在 Delphi 7 中打开 EhLib70.dpk ,编译,但不要安装。 (5). 在 Delphi 7 中打开 DclEhLib70.dpk ,编译并安装。 (6). 组件面板中出现一个 EhLib 的组件页。 (7). 打开附带的 DEMOS ,编译并运行,测试安装成功。 二、使用 DxDbGrid 1 、窗体拖入 dxDBGrid1 、 ADOConnection1 、 ADOQuery1 、 DataSource1 、 Button1 、 SaveDialog1 ,然后完成数据的链接及相关控件关联,如何操作,你应该懂的;接下来完成如下图所示的一个表格: 2 、双击 dxDBGrid1 ,在 Bands 栏增加 TdxTreeListBand 并填写 Caption ,注意要将 dxDBGrid1 的 ShowBands 属性设置为 True 才能显示 Bands 栏;同样双击 dxDBGrid1 ,在 Columns 栏,添加多个 dxGridColumn (根据需要选择不同的类型)并使其与数据库字段形成关联,涉及如下几个属性, BandIndex 选择对应的 Band 从而形成二级表头, Caption 、 FieldName 、 HeaderAlignment 、 width 等,如此完成了基本的表格设计,如果喜欢表头平滑更改 LookAndFeel 属性为 lfFlat 即可。 如果增加排序功能, edgoAutoSort(True) 、 edgoLoadAllRecords(True) 、 KeyField (数据库表主键字段)。 如果需要 Footer 汇总,首先设置属性 showSummeryFooter 为 True ,然后选择需要汇总的 dxGridColum 根据需要更改其 summaryFooterType 属性如 cstSum (或 cstAvg ),如需要显示汉字,可设置 SummaryFooterFormat 如(平均年龄 0.00 )。 导出 Excel 可直接利用 dxDbGrid 的 SaveToXLS 方法,具体代码参考如下: view plaincopy to clipboardprint?1. unitUnit1;2. interface3. uses4. Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,5. Dialogs,ComCtrls,StdCtrls,dxExEdtr,dxCntner,dxTL,dxDBCtrl,dxDBGrid,6. DB,ADODB,dxDBTLCl,dxGrClms;7. type8. TSaveMethod=procedure(constFileName:String;ASaveAll:Boolean)ofobject;9. type10. TForm1=class(TForm)11. GroupBox1:TGroupBox;12. GroupBox2:TGroupBox;13. dxDBGrid1:TdxDBGrid;14. ADOConnection1:TADOConnection;15. ADOQuery1:TADOQuery;16. DataSource1:TDataSource;17. dxDBGrid1Column2:TdxDBGridColumn;18. dxDBGrid1Column1:TdxDBGridMaskColumn;19. dxDBGrid1Column3:TdxDBGridColumn;20. dxDBGrid1Column4:TdxDBGridCheckColumn;21. dxDBGrid1Column5:TdxDBGridDateColumn;22. dxDBGrid1Column6:TdxDBGridColumn;23. dxDBGrid1Column7:TdxDBGridColumn;24. dxDBGrid1Column8:TdxDBGridColumn;25. Button1:TButton;26. SaveDialog1:TSaveDialog;27. procedureButton1Click(Sender:TObject);28. private29. procedureSave(ADefaultExt,AFilter,AFileName:String;AMethod:TSaveMethod);30. public31. Publicdeclarations32. end;33. var34. Form1:TForm1;35. implementation36. $R*.dfm37. procedureTForm1.Save(ADefaultExt,AFilter,AFileName:String;AMethod:TSaveMethod);38. begin39. withSaveDialog1do40. begin41. DefaultExt:=ADefaultExt;42. Filter:=AFilter;43. FileName:=AFileName;44. ifExecutethen45. AMethod(FileName,true);46. end;47. end;48. procedureTForm1.Button1Click(Sender:TObject);49. begin50. Save(xls,MicrosoftExcel4.0Worksheet(*.xls)|*.xls,ExpGrid.xls,dxDBGrid1.SaveToXLS);51. end;52. end.三、使用 DbGridEh 1 、窗体拖入 DBGridEh1 、 ADOConnection1 、 ADOQuery1 、 DataSource1 、 Button1 、 SaveDialog1 ,然后完成数据的链接及相关控件关联;接下来完成如下图所示的一个表格: 2 、双击 DbgridEh1 ,新增多个 Columns 并使之与数据字段对应, DbgridEh 设计多表头的关键在于 Culumn 属性 Title 的设定,如上表格“编号”、“名称”需要将 Title-Caption 分别设置为“地址 | 编号”、“地址 | 名称”,原来起作用的关键在于“ | ”这个分隔符;当然还需要设置其他的属性, FieldName 对应显示的字段,如果需要 Footer ,则在 Column 的 Footer 属性完成相关设置,如上表格,设置“编号”列的 Footer- Value 为“合计:”, ValueType 为“ fvtStaticText ”;“名称”列的 Footer- FieldName 为“ id ” ( 此处只是为了将第一列 ID 的和显示在第二列姓名的汇总栏,只为测试没有什么实际意义 ) , ValueType 为“ fvtSum ”。 导出 Excel ,以下导出 Excel 函数代码可以进一步完善,日后再说吧,来活了!发现研究一个东西需要时间,整理研究成果的更长。 view plaincopy to clipboardprint?1. unitUnit1;2. interface3. uses4. Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,5. Dialogs,DBGridEhGrouping,DB,ADODB,GridsEh,DBGridEh,Grids,DBGrids,6. StdCtrls,DBGridEhImpExp,ComObj,excel2000,oleserver;7. type8. TForm1=class(TForm)9. DBGridEh1:TDBGridEh;10. ADOConnection1:TADOConnection;11. DataSource1:TDataSource;12. ADOQuery1:TADOQuery;13. Button1:TButton;14. procedureButton1Click(Sender:TObject);15. private16. Privatedeclarations17. procedureExportToExcel;18. public19. Publicdeclarations20. end;21. var22. Form1:TForm1;23. implementation24. $R*.dfm25. procedureTForm1.ExportToExcel;26. var27. XLApp:Variant;28. Sheet:Variant;29. s1,s2:string;30. Caption:String;31. Row,Col:integer;32. iCount,jCount:Integer;33. FBookMark:TBookmark;34. FileName:String;35. SaveDialog1:TSaveDialog;36. TitleName:string;37. begin38. /如果数据集为空或没有打开则退出 39. ifnotDBGridEh1.DataSource.DataSet.ActivethenExit;40. SaveDialog1:=TSaveDialog.Create(Nil);41. SaveDialog1.FileName:=TitleName+_+FormatDateTime(YYMMDD,Date);42. SaveDialog1.Filter:=Excel文件|*.xls;43. ifSaveDialog1.Executethen44. FileName:=SaveDialog1.FileName;45. SaveDialog1.Free;46. ifFileName=thenExit;47. Application.ProcessMessages;48. Screen.Cursor:=crHourGlass;49. 50. ifnotVarIsEmpty(XLApp)then51. begin52. XLApp.DisplayAlerts:=False;53. XLApp.Quit;54. VarClear(XLApp);55. end;56. /通过ole创建Excel对象 57. try58. XLApp:=CreateOleObject(Excel.Application);59. except60. MessageDlg(创建Excel对象失败,请检查你的系统是否正确安装了Excel软件!,mtError,mbOk,0);61. Screen.Cursor:=crDefault;62. Exit;63. end;64. 65. /生成工作页 66. XLApp.WorkBooks.AddxlWBatWorkSheet;67. XLApp.WorkBooks1.WorkSheets1.Name:=TitleName;68. Sheet:=XLApp.Workbooks1.WorkSheetsTitleName;69. /写标题 70. sheet.cells1,1:=TitleName;71. sheet.rangesheet.cells1,1,sheet.cells1,DBGridEh1.Columns.Count.Select;/选择该列 72. XLApp.selection.HorizontalAlignment:=$FFFFEFF4;/居中 73. XLApp.selection.MergeCells:=True;/合并 74. /写表头 75. Row:=1;76. jCount:=3;77. foriCount:=0toDBGridEh1.Columns.Count-1do78. begin79. Col:=2;80. Row:=iCount+1;81. Caption:=DBGridEh1.ColumnsiCount.Title.Caption;82. whilePOS(|,Caption)0do83. begin84. jCount:=4;85. s1:=Copy(Caption,1,Pos(|,Caption)-1);86. ifs2=s1then87. begin88. sheet.rangesheet.cellsCol,Row-1,sheet.cellsCol,Row.Select;89. XLApp.selection.HorizontalAlignment:=$FFFFEFF4;90. XLApp.selection.MergeCells:=True;91. end92. else93. Sheet.cellsCol,Row:=Copy(Caption,1,Pos(|,Caption)-1);94. Caption:=Copy(Caption,Pos(|,Caption)+1,Length(Caption);95. Inc(Col);96. s2:=s1;97. end;98. Sheet.cellsCol,Row:=Caption;99. Inc(Row);100. end;101. /合并表头并居中 102. ifjCount=4then103. foriCount:=1toDBGridEh1.Columns.Countdo104. ifSheet.cells3,iCount.Value=then105. begin106. sheet.rangesheet.cells2,iCount,sheet.cells3,iCount.Select;107. XLApp.selection.HorizontalAlignment:=$FFFFEFF4;108. XLApp.selection.MergeCells:=True;109. end110. elsebegin111. sheet.cells3,iCount.Select;112. XLApp.selection.HorizontalAlignment:=$FFFFEFF4;113. end;114. /读取数据 115. DBGridEh1.DataSource.DataSet.DisableControls;116. FBookMark:=DBGridEh1.DataSource.DataSet.GetBookmark;117. DBGridEh1.DataSource.DataSet.First;118. whilenotDBGridEh1.DataSource.DataSet.Eofdo119. begin120. foriCount:=1toDBGridEh1.Columns.Countdo121. Sheet.cellsjCount,iCount:=DBGridEh1.Columns.ItemsiCount-1.Field.AsString;122. Inc(jCount);123. DBGridEh1.DataSource.DataSet.Next;124. end;125. ifDBGridEh1.Da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025申请合同仲裁范本
- 2025软件捆绑合作协议合同范本
- 2025年汽车工程与设计基础知识考试试卷及答案
- 2025年铁路车站值班员职业技能(初级)考试题(附答案)
- 2025年爆破作业人员培训考核必考题库及答案
- 2025年国家保安员资格证考试必刷题库含完整答案【有一套】
- 2025房屋租赁合同范本
- 第二单元第一课《观照自然》说课稿 -人美版(2024)初中美术七年级下册
- 2024年春八年级生物下册 24.4 家居环境与健康说课稿 (新版)北师大版
- 2024新教材高中化学 第1章 原子结构 元素周期律 第3节 元素周期表的应用 第1课时 认识同周期元素性质的递变规律说课稿 鲁科版第二册
- 康复医学科关于无效中止康复训练的制度与流程
- GB/T 13460-2016再生橡胶通用规范
- 《矩阵论》研究生教学课件
- 中国荨麻疹诊疗指南(2022版)
- 北京市统一医疗服务收费标准
- 陈明伤寒论经方加减治疗脾胃病陈明
- 简明新疆地方史赵阳
- 基础观感验收自评报告
- 班级管理(第3版)教学课件汇总全套电子教案(完整版)
- 公路桥梁工程施工安全专项风险评估报告
- T∕ACSC 02-2022 中医医院建筑设计规范
评论
0/150
提交评论