版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、unit SGridFunction;interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, SConncct,Dialogs, Global, Grids, DBGrids, DB, DBClicnt, WinSkinData,StdCtrls,Buttons, ExtCtrls, ComCtrls, ComObj, Clipbrd, ADODB;成功提示框/AMsg:成功提示信息procedure SucccssMsgbox (AMsg: St ring);/错谋提示框/
2、AMsg:错谋提示信息procedure ErrorMsgbox (AMsg: St ring);/询问提示框/strMsg: 询问信息function AskMsgbox(AMsg: String): Boolean;/信息提示框/AMsg:提示信息procedure InfoMsgbox(AMsg: String);/导出数据到Excel/ASGrid:需要导出的 StringGrid/ExcclModalPath:报表模版全路径,为空则新建工作簿/ExcclFileName: Excel文件的默认文件名/AGridStartCol, AGridStartRow: StringGrid的起
3、始列和行,从 0 开始/AExcclStartCol, AExcclStartRow: Excel的起始列和行)从 1 开始procedure ExportToExccl (ASGrid: TStringGrid; ExcclModalPath, ExcclFileName: String;AGridStartCol, AGridStartRow, AExcclStartCol,AExcclStartRow:Integer);/取得某一列数据的最大长度/ASgrid:口标 StringGrid/ACol:口标列,从0开始/AStartRow:起始行,从0开始function GctColMax
4、DataLcngth(ASGrid: TStringGrid; ACol, AStartRow:Integer): Integer;/根据数据长度自动设置指定列的列宽/ASgrid:口标 StringGrid/ACol: 口标列,从0开始procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer);根据数据长度自动设置全部列的列宽/ASgrid:口标 StringGridprocedure SctAllColWidth(ASGrid: TStringGrid);/显示ClientDataSet 中的数据/ASgrid:口标 Strin
5、gGrid/ACDSct:包含数据的 ClientDataSet/AGridStartCol, AGridStartRow: StringGrid的起始列和行,从 0 开始procedure ShowClientDataSetData(ASGrid: TStringGrid; ACDSct: TClicntDataSct;AGridStartCol, AGridStartRow: Integer);/显示 ADOQueryJ、的数据/ASgrid:口标 StringGrid/AQuery:包含数据的 ADOQuery/AGridStartCol, AGridStartRow: StringGr
6、id的起始列和行,从 0 开始procedure ShowQueryData(ASGrid: TStringGrid; AQuery: TADOQuery;AGridStartCol, AGridStartRow: Integer);判断是否含有数据/true:包含数据/false:不包含数据/ASgrid:口标 StringGrid/AStartCol, AStartRow:起始列和彳亍,从 0开始function HaveData(ASGrid: TStringGrid; AStartCol, AStartRow: Integer):Boolcan;取得9位以内整数位数/>=1 :该
7、整型数的长度/0:空值-1 :长度超过9位/ANumber:需要判断位数的整型数/为指定的序/ASGrid: 口function GctlntcgcrNumbcrLcngth(ANumbcr: Integer): Integer;号列赋值序号编号从1开始/ASGrid: 口标 StringGrid/ACol: 口标列,从0开始/AStartRow:起始行,从0开始procedure SctNumberFields (ASGrid: TStringGrid; ACol, AStartRow:Integer);/设置指定的列的对齐方式为右对齐实现方式为在数据左边补空格,所以取数据时应注意去掉空格标
8、 StringGrid/ACol: 口标列,从0开始/AStartRow:起始行,从0开始procedure SetColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer);/设置指定行的左边距/ASGrid: 口标 StringGrid/ARow: 口标彳亍,从0开始procedure SctRowLcftSpacc (ASGrid: TStringGrid; ARow, SpaccLength:Integer);设置指定行的最小右边距/ASGrid: 口标 StringGrid/ARow: 口标彳亍,从0开始procedure
9、 SctRowMinRightSpacc (ASGrid: TStringGrid; ARow, SpaccLength:Integer);设置指定行的最小边距/ASGrid: 口标 StringGrid/ARow: 口标彳亍,从 0开始procedure SctRowMinSpaccWidth (ASGrid: TStringGrid; ARow, SpaccLength:Integer);获得当前X坐标所在的列ASGrid:口标 StringGrid/AX:坐标的X值function GctColByCX(ASGrid: TStringGrid; AX: Integer): Integer
10、;/获得当前丫坐标所在的行/ASGrid: 标 StringGrid/AY:坐标的Y值function GctRowByCY(ASGrid: TStringGrid; AY: Integer): Integer;获得当前坐标所处的单元格的行列值/ASGrid: 标 StringGrid/AX, AY:坐标的X, Y 值/ACol, ARow:单元格的列,行索引,从0开始procedure GetCellByCoordinate(ASGrid: TStringGrid; AX,AY: Integer;out ACol, ARow: Integer);填充空的单元格为指定值/ASGrid: 口标
11、StringGrid/AStartCol, AStartRow:开始列和彳亍,从 0开始/AEndCol, AEndRow:结束列和彳亍/AValue:填充值procedure SetSpaeeCells (ASGrid: TStringGrid; AStartCol, AStartRow, AEndCol, AEndRow: Integer; AValue:String);implementation/ / /成功提示框/ / /procedure SueeessMsgbox (AMsg: St ring);beginApplication. MessageBox (Pehar (AMsg)
12、, '完成',MB I CON INFORMAT I ON + MB OK);end;/错谋提示框/ /procedure ErrorMsgbox (AMsg: St ring);beginApplication. McssageBox (Pchar (AMsg), '错误',MB ICONSTOP + MB_OK); end;/ /询问提示框/ /function AskMsgbox(AMsg: String): Boolean;beginif Application. McssageBox (Pchar (AMsg), '确认')MB ICO
13、NQUESTION + MB YESNO) = IDYES thenbeginresuIt :二 true;endelse beginresuIt :二 false;end;end;/ /消息提示框/ /procedure InfoMsgbox(AMsg: String);beginApplication. McssageBox (Pchar (AMsg), '提示')MB I CON INFORMATI ON +MB OK);end;/ / /导出数据到Excel/ / /procedure ExportToExccl (ASGrid: TStringGrid; ExcclM
14、odalPath,ExcclFileName:String;,AGridStartCol, AGridStartRow, AExcclStartCol, AExcclStartRow:Integer); varExcclApp: Variant;ColIndex, Rowindex: Integer;OneRowData: String; / 单行数据DataList: TStringList; / 所有数据SavcDlg: TSavcDialog; / 保存对话框SavcExcclFi 1 ePath: String; /Excel文件的保存路径begin try/没有数据时直接退出if n
15、ot HavcData (ASGrid, AGridStartCol, AGridStartRow) then beginInfoMsgBoxC没有数据需要导出。); exit;end;/选择保存路径trySavcDlg := TSavcDialog. Create(ASGrid) ;/ 创建保存窗口对象SaveDlg. InitialDir := ExtractFilcPath(Application. ExcNamc); /文件保存在当前口录SaveDlg. Filter := 'Excel Files(*. xls) | *? xls' ;/ 文件类型过滤SaveDlg.
16、 FileName := ExcclFileName + VarToStr (date) ;/ 定义默认文件名if SaveDlg. Execute then beginSavcExcclFilePath := SaveDlg. FileName; / 保存文件路径 end else beginexit; /放弃导出end;finallySaveDlg. Free; / 释放对彖end;/创建Excel对彖tryExcelApp := CrcateOlcObjcct ( ' Excel. Application' ) ;/ 创建新Excel对彖exceptErrorMsgBox
17、 C请确认您的机器已经安装Microsoft Excel 。);Exit;end;try/打开Excel工作簿try/打开报表模版ii(cxcclModalPath <> null) and (cxcclModalPath ? '') then beginExcelApp. WorkB00ks. Open(ExcclModalPath); end /添加新工作簿 else beginExcelApp. WorkBooks. Add;设置列宽for Collndcx := 0 to ASGrid. ColCount - AGridStartCol - 1 dobegi
18、n/ 此处不能使用 ASGrid. ColWidths AGridStartCol + ColIndex;ExcclApp.ActivcShcct ? ColumnsAExcclStartCol +ColIndex. ColumnWidthkGctColMaxDataLcngth(ASGrid, AGridStartCol + Collndcx, AGridStartRow);end;/ 数字 NumberFormatLocal = 0? 00 "/ 日期 NumberFormatLocal = yyyy-ni-d / 日寸间 NumberFormatLocal = $- F400h
19、:mni: ss AM/PM"/ 文本 NumberFormatLocal =ExcclApp. Cells. NumberFormatLocal := ' / 设置单元格为文本格式end;ExcclApp. Worksheets1. Activate; /设置第1个工作表为活动工作表ExcclApp. Cells ? ItcmAExcclStartRow,AExcclStartCol. Select; / 设定 Excel 起始单元格exceptErrorMsgBox (' 无法打开报表模版:+ #13 + ExcclModalPath) ; /#13为回车换行ex
20、it;end;try/通过剪切板导出数据try/ 初始化 DataListDataList :二 TStringList. Crcatc;DataList ? Clear;/将数据保存到DataListwith ASGrid dobegin行for Rowindex := AGridStartRow to RowCount - 1 dobegin OncRowData :=;/列 for Collndcx := AGridStartCol to ColCount -Ido beginOncRowData := OncRowData + Trim (CelIsColIndex,Rowindex)
21、 + #9; /#9为制表符end;DataList. Add(OncRowData) ;/将该彳亍数据添加到DataList end;end;ClipBoard. AsText := DataList. Text;/ 将 DataList 中的数据拷贝到剪切板ExcclApp. ActivcShect. Paste; /将剪切板中的数据拷贝至UExcelfinallyDataList. Free; / 释放 DataListClipBoard. Clear; / 清空剪切板 end;保存Excel文件ExcclApp. ActivcWorkbook. SaveAs (SavcExcclFil
22、ePath) ;/ 另存为到指定口录SuccessMsgBox('成功将文件保存到:'+ #13 +SavcExcclF 订 ePath) ;/ 保存成功finallyExcclApp. DisplayAlcrts := false;/ 不弹出保存提示对话框ExcclApp. WorkBooks. Close; / 关闭工作簿 end;finallyExcclApp. Quit; / 关闭 Excel 进程ExcelApp:= Unassigned; / 释放 ExcclAppexceptOn c: Exception dobeginErrorMsgbox(c. Message
23、);end;end;end;/ / /取得某一列数据的最大长度/ / /function GctColMaxDataLcngth(ASGrid: TStringGrid; ACol, AStartRow:Integer): Integer; varCollndcx, Rowindex: Integer;MaxColLength: Integer; /列数据的最大长度beginMaxColLength := 0;with ASGrid dobegin取得列数据的最大长度for Rowindex := AStartRow to RowCount 一 1 dobeginif length (Cell
24、sACol, Rowindex) > MaxColLength then beginMaxColLengthk length (CellsACol, Rowindex); end;end;result :二 MaxColLength;end;/ / /根据数据长度自动设置指定列的列宽/ / /procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer); varOncCharPixcl: Integer; / 一个字符所占的像素数RightSpaccWidth: Integer; / 右边距空隙beginRightSpaccWi
25、dth := 3;/设置为3达到和左边距一致的效果OncCharPixcl := 6; /6 对应9号字此处最好写成一个根据字号获得像素值的函数*ASGrid. ColWidthsACol := GetColMaxDataLcngth(ASGrid, ACol, 0) * OncCharPixcl+ RightSpaccWidth;end;/ / /根据数据长度自动设置全部列的列宽/ / /procedure SctAllColWidth(ASGrid: TStringGrid); varCol Index: Integer; / 需耍设置的列beginfor Collndcx := 0 to
26、 ASGrid. ColCount - 1 dobeginSctOncColWidth(ASGrid, Collndcx);end;end;/显示ClicntDataSct 中的数据/ / / procedure ShowClicntDataSctData(ASGrid: TStringGrid; ACDSct: TClicntDataSct;AGridStartCol, AGridStartRow: Integer);varColIndex: Integer;Rowindex: Integer;begintrywith ASGrid dobegin/没有记录时,清空StringGrid 并返
27、回if ACDSct. RccordCount <= 0 thenbeginRowCount := 2;for Collndcx := Oto ColCount - 1 dobeginCellsColIndcx, 1:二;end;exit;end;RowCount := AGridStartRow + ACDSct. RccordCount; /StringGridColCount := AGridStartCol + ACDSct. FieldCount; /StringGridRowindex := AGridStartRow; / 当前彳亍为起始行while not ACDSct.
28、 Eof do显示数据for Collndcx := AGridStartCol to ColCount -IdobeginCellsCollndcx, RowindexkACDSet. Fields. FieldsCollndcx -AGridStartCol. AsStringend;转到下一行Rowindex := Rowindex + 1;ACDSet. Next;end;end;exceptOn c: Exception dobeginErrorMsgBox(c. Message);end;end;end;/ /显示ADOQuery、的数据/ /procedure ShowQuery
29、Data(ASGrid: TStringGrid; AQuery: TADOQuery; AGridStartCol, AGridStartRow: Integer);varCollndcx: Integer;Rowindex: Integer;begintry/没有记录时)清空StringGrid 并返回if AQucry- RccordCount <= 0 thenbeginRowCount := 2;for Collndcx := Oto ColCount -ldobeginCellsColIndcx, 1:二;end; Iexit;end;RowCount := AGridSta
30、rtRow + AQuery. RccordCount; /StringGrid彳亍数ColCount := AGridStartCol + AQuery. FieldCount; /StringGrid歹U 数Rowindex := AGridStartRow; / 当前彳亍为起始行while not AQuery. Eof dobegin显示数据for Collndcx := AGridStartCol to ColCo unt - ldo beginCellsCollndcx, RowindexkAQuery.Fields. FieldsColIndcx -AGridStartCol.
31、AsStringend;/转到下一行Rowindex := Rowindex + 1;AQuery. Next;end;end;exceptOn c: Exception dowith ASGrid dobeginErrorMsgBox(c. Message);end;end;end;/ / /判断是否含有数据/ / /function HavcData(ASGrid: TStringGrid; AStartCol, AStartRow: Integer):Boolean;varCollndcx, Rowindex: Integer;beginwith ASgrid dobeginfor Co
32、llndcx := AStartCol to ColCount -ldobeginfor Rowindex := AStartRow to RowCount 一 1 do begin /包含数据,返回trueif CcllsEColIndcx, Rowindex <> '' then begin resuIt :二 true;exit;end;end;end;end;没有数据,返回falseresuIt :二 false;end;取得9位以内整数位数/function GctlntcgcrNumbcrLcngth(ANumbcr: Integer): Integer
33、; varIsNcgativeNumbcr: Boolean; / 参数的正负,负数为 true Loopindex: Integer;/循环变量ComporeNumber: Integer; / 用于比较的数NumbcrLength: Integer; /返凹值)长度大于 10返回Tbeginif ANumbcr = null thenbeginresult :二 0; / 空值返回 0exit;end;/判断参数的?正负if ANumbcr < 0 thenbeginANumbcr := 0 - ANumbcr; /转换成正数用于计算长度IsNegativeNumbcr : = tr
34、ue; / 是负数endelse beginif ANumbcr = 0 thenbeginresult := 1; 是0,直接返回1exit;end;IsNcgativcNumber := false; / 是正数end;/开始比较ComporeNumber:= 10;for Loopindex := It o 9 dobegin/长度符合要求if (ComporcNumbcr div ANumbcr) > Othenbegin得到长度if ComporcNumbcr = ANumbcr then NumbcrLcngth := Loopindex + 1 else NumbcrLcn
35、gth := Loopindex;/如果是负数,则长度加1,即包含负号if IsNcgativcNumbcr then resuIt:二 NumbcrLcngth + 1else result := NumbcrLcngth;exit;end;增大1位继续比较ComporcNumbcr := ComporcNumbcr * 10;continue;end;result :二-1; 长度大于9,返回Tend;/ / /为指定的序号列赋值/ / /procedure SctNumbcrFic 1 ds(ASGrid: TStringGrid; ACol, AStartRow:Integer);va
36、rRowindex: Integer; / 当前序号beginwith ASGrid dobeginfor Rowindex := 1 to RowCount - AStartRow dobegin添加序号CellsACol, AStartRow + Rowindex - 1 := VarToStr(Rowindex);end;end;end;/ / /设置指定的列的对齐方式为右对齐/ / /procedure SctColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer); varRowindex: Integer;MaxDat
37、aLength: Integer; /该列最大的数据长度beginMaxDataLength := GctColMaxDataLength(ASGrid, ACol, 0) ;/ 取得该列最大的数据长度with ASGrid dobeginfor Rowindex := AStartRow to RowCount - 1 dobeginwhile length (Co11sACo1, Rowindex) < MaxDataLength do beginCellsACol, Rowindex:二”+CellsACol, Rowindex; / 在前面补空格end;end;end;end;/
38、设置指定行的左边距/ / procedure SctRowLcftSpacc (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer);varColIndex, Loopindex: Integer;beginwith ASGrid dobeginfor Collndcx := Oto ColCount -ldobegin/去掉左/在左边补CellsColIndcx, ARow := TrimLcft(CellsCollndcx, ARow);边空格for Loopindex := It o SpaccLcngth dobeginCellsColIndc
39、x, ARowk''4- CellsCollndex, ARow;空格end;end;end;end;/ / /设置指定行的最小右边距/ / /procedure SctRowMinRightSpacc (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer); varCollndcx, Loopindex: Integer;with ASGrid dobeginfor Collndcx := Ot o ColCou nt - Ido beginCellsColIndcx, ARow := TrimRight(CellsCollndex,
40、 ARow);边空格for Loopindex := It o SpaccLcngth dobeginCellsColIndcx, ARowk CellsCollndcx, ARow + ''空格end;end;end;end;/ / /设置指定行的最小边距/ / /procedure SctRowMinSpaccWidth (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer);varColIndex, Loopindex: Integer;beginwith ASGrid dobeginfor Collndcx := Oto Col
41、Count -ldobeginCellsColIndcx, ARow := Trim (Cel Is Col Index, ARow);边空格/去掉右/在右边补/去掉两for Loopindex := It o SpaccLcngth dobegin;/CellsColIndcx, ARow :二"+ CellsCollndex, ARow +在两边补空格end;end;end;/ /获得当前X坐标所在的列/ /function GctColByCX(ASGrid: TStringGrid; AX: Integer): Integer; varColIndex: Integer;CurCcllRect: TRect; /当前列的矩形区域beginwith ASGri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中培训机构工作计划书
- 培训机构异地就业
- 2024年美食广场早餐区特许经营合同3篇
- 2024年武陟县人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年横山县中医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 商业保理业务培训
- 医疗建筑电气培训
- 高中信息技术粤教版必修说课稿 -2.4.2 活动任务001
- 2024版软件交易协议样本一
- 2024版国际会展服务标准协议版B版
- 车间主任个人年终总结
- 2024年甘肃省公务员录用考试《行测》试题及答案解析
- 职业技术学院《工程力学》课程标准
- 消防工程技术专业毕业实习报告范文
- 2024年高等教育法学类自考-00229证据法学考试近5年真题附答案
- 科技成果技术成熟度评估规范
- 安徽省合肥市一六八中2025届高二生物第一学期期末教学质量检测试题含解析
- 医院后勤管理作业指导书
- 六年级下册心理健康教育教案-8 男女生交往小闹钟辽大版
- 【课件】第五单元化学反应的定量关系新版教材单元分析九年级化学人教版(2024)上册
- 国库资金支付管理办法
评论
0/150
提交评论