在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
procedure Tfrm_main.XLGW_Excel(p_int_Row_Begin, p_int_Col_Begin,
p_int_Row_End, p_int_Col_End: Integer; p_str_Value, p_str: String); var m_Query : TADOQuery; m_StringList_FieldNames : TStringList; m_int,rowid : Integer; m_int_Row : Integer; ExcelApp,ExcelObj:TExcel; //引用excel单元 m_str,Astr : String; HJXLCD:string; i:Integer; //用于控制列宽变量 begin m_Query := TADOQuery.Create(nil); ExcelObj:=TExcel.Create; try {填写表头} m_Query.Connection:= sqlclass.conn; m_str := p_str; m_Query.Close; m_Query.SQL.Clear; m_Query.SQL.Add(m_str); try m_Query.Open; except ShowMessage('报表输出失败,请重新计算!'); Exit; end; if m_Query.IsEmpty then begin ShowMessage('没有要导出的数据!'); Exit; end; if not ExcelObj.New_WorkBook then //显示工作薄 begin ShowMessage('新建工作簿失败'); Exit; end; try //页面设置 //纵向xlPortrait //横向xlLandscape ExcelObj.SetSheetPage(xlPaperA4,xlLandscape,0.6,0.6,0.6,0.6,0.3,0.3); except end; ExcelObj.IsVisible(True); //控制是否显示Excel m_StringList_FieldNames := TStringList.Create; m_Query.GetFieldNames(m_StringList_FieldNames); ExcelObj .SetCell('序号',2,1,0); for m_int := 1 to m_StringList_FieldNames.Count do begin //设置指定单元格的值 ExcelObj.SetCell(m_StringList_FieldNames.Strings[m_int - 1],2, m_int+1,0); end; {写入数据} rowid :=0; m_int_Row := 3; //行 while not m_Query.Eof do begin rowid:=rowid+1; ExcelObj.SetCell(IntToStr(rowid),m_int_Row, 1,1); //加序号 for m_int := 1 to m_StringList_FieldNames.Count do begin //判断输出字段类型 // (0:字符型;1:整形;2,3:数值型) 增加清零操作 Astr:= m_Query.FieldByName(m_StringList_FieldNames.Strings[m_int - 1]).AsString; { if m_Query.Fields[m_int - 1].DataType in [ftSmallint, ftInteger,ftBCD ] then begin if (Astr = '') or (StrtoInt(Astr)=0) then begin Continue; end; //ExcelObj.SetCell(Astr,m_int_Row, m_int+1,1); //weixing 20100707 end else } if m_Query.Fields[m_int - 1].DataType in [ftWord,ftFloat] then begin if (Astr = '') or (StrtoFloat(Astr)=0) then begin Continue; end; ExcelObj.SetCell(Astr,m_int_Row, m_int+1,2); end else if m_Query.Fields[m_int - 1].DataType in [ftInteger] then //weixing 20100707 begin if (Astr = '') or (StrtoFloat(Astr)=0) then begin Continue; end; ExcelObj.SetCell(Astr,m_int_Row, m_int+1,1); end else begin ExcelObj.SetCell(Astr,m_int_Row, m_int+1,0); end;//if end; //if // end;//for m_int_Row := m_int_Row + 1; m_Query.Next; end;//While for i:=1 to 13 do begin if (i=1) then ExcelObj.SetColumnWidth(i,24) else ExcelObj.SetColumnWidth(i,7); end; for m_int:=1 to m_int_Row-1 do begin ExcelObj.SetRowHeight(m_int,18); //设置指定行的行高 //单元格居中 ExcelObj.SetRowHorizontalAlignment(m_int,xlHAlignCenter); ExcelObj.SetRowVerticalAlignment(m_int,xlHAlignCenter); end; p_int_Col_End:=m_StringList_FieldNames.Count; {设置表格函数} ExcelObj.MergeCells(p_int_Row_Begin, p_int_Col_Begin,p_int_Row_End, p_int_Col_End);//合并单元格 //设置标题指定范围的值 ExcelObj.SetRangeValue(1,1,p_int_Row_Begin, p_int_Col_Begin,p_str_Value); //生成标题参数设置 ExcelObj.SetRowFontStyle(p_int_Row_Begin,'加粗','宋体',0,15); //标题行高 ExcelObj.SetRowHeight(1,33); //设置指定行的行高 //加单元格 ExcelObj.SetRangeOutBorderStyle(2,1,m_int_Row-1, m_StringList_FieldNames.Count+1,2,0,1);//单元格外部加边线 ExcelObj.SetRangeInnerLineStyle(2,1,m_int_Row-1, m_StringList_FieldNames.Count+1,2,0,1);//单元格内部加边线 ExcelObj.SetRangeAutoWrap(3,1,3, m_StringList_FieldNames.Count);//指定行自动换行 //ExcelObj.SetRowFontStyle(3,'加粗','宋体',0,12);//生成排头参数设置 //最后一行合计所有数值字段 //ExcelObj.SetRangeValue(m_int_Row,1,m_int_Row,1,'合计'); //往单元格写入'合计'; { for m_int := 1 to m_StringList_FieldNames.Count do //行列号为: m_int_Row,m_int ; begin if m_Query.Fields[m_int - 1].DataType in [ftSmallint, ftInteger, ftWord,ftFloat,ftBCD] then begin HJXLCD:=FloatToStr(ExcelObj.Sum(4,m_int,m_int_Row,m_int)); //合计线路长度 ExcelObj.SetRangeValue(m_int_Row,m_int,m_int_Row,m_int,HJXLCD); end; end; } ExcelObj.CellAutoFit;//自动列宽 m_StringList_FieldNames.free; finally m_Query.Free; ExcelObj.Destroy; end; end;
{利用OLE技术实现的与Excel应用程序的接口 可以实现表格设计,数据输出,模板定制, 打印设置,打印预览,打印表格等功能;} unit Excel_Unit;{单元名称} interface{接口部分} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Excel97,OleServer, StdCtrls,Variants,ExcelConst_Unit,ComObj; const //报表平面图参数 pm_Title = '配 电 线 路 条 图'; pm_PageRows = 21; pm_PageOffset = 530;// //页与页之间图形距离 pm_LineLeft = 123; //线起始left pm_LineTop = 72;//74; //线起始top pm_LineRight = 727;//705; //线终止right //水平所以没有y坐标 pm_GanFirstLeft = 118; //最左第一个杆的left坐标 pm_GanOffset = 60; //杆间距 pm_GanTop = 166;//67; //杆距顶top pm_GanD = 10; //杆径 12 pm_BYQD = 13;//14; //变压器大小 13 pm_BYQY = -7; //变压器距杆距离 20 pm_Distance = 27;//30; //转角箭头线段长 dm_GanTop = 143.25; //断面杆 dm_HaiBa = 0; //海拔 dm_HuChui = 5; //导线下垂弧度 //下面记录类型用于绘制平断面图 type TRecData = record XLMC: String; //线路名称 GH: String; //杆号 GX: String; //电杆种类及杆型 GG: String; //杆高 MS: String; //埋深 DXPL: String; //导线排列 DXXH: String; //导线型号 DJ: String; //档距 LJCD: String; //累计长度 ZJBZ: Integer; //画转角标志 1: 画转角 0: 不画转角 ZJ: String; //线路转角 JCKY: String; //交叉跨越 CZJL: String; //垂直距离 HDGG: String; //横担规格 LXWZ: String; //拉线位置 LXXHGS: String; //拉线型号/根数 JYZXHSL: String;//绝缘子型号/数量 GZZSY: String; //故障指示仪 BTXS: String; //变台型式 PBRL: String; //配变容量 HM: String; //户名 BLQGG: String; //避雷器规格 BLQSL: String; //避雷器数量 KGGG: String; //开关规格 KGSL: String; //开关数量 FZ1ZJ: String; //分支1转角 FZ2ZJ: String; //分支2转角 FZ1MC: String; //分支1名称 FZ2MC: String; //分支2名称 IsCable: Integer; //是否有电缆 1: 电缆 0: 不是电缆 IsTJPole: Integer; //是否是引出分支杆 end; PRecData = ^TRecData; type TWindowObject = record WinHandle : HWnd; {Window Handle} WinCaption : String; {Window Caption Text (If any)} ProcessID : Integer; {Process the window belongs to} IsVisible : Boolean; {Is the window visible?} IsEnabled : Boolean; {Is the window enabled for mouse/keyboard input?} IsIconic : Boolean; {Is the window minimized?} WindowRect : TRect; {Window Dimensions} {Add more properties here if you like, then fill them in at the WindowCallback function.} end; PTWindowObject = ^TWindowObject; //Excel操作类 TExcel = class(TObject) private MyExcel: Variant; //存储Excel对象 Book :Variant; //当前工作表 Sheet:Variant; //当前工作表 protected { protected declarations } function GetRowNum(TStr:string):Integer; //获取指定单元格的行号() function GetColNum(TStr:string):Integer; //获取指定单元格的行号 public { Public declarations } IsPageSetup:Boolean; //是否进行了页面设置 Template_Path:string; //模板路径 Template_Name:string; //模板名称 Template_OpenName:String; //打开的模板的名称 ActiveSheet:Integer; //当前活动的页 UsedRowBeg:Integer; //当前已使用的起始行 UsedColBeg:Integer; //当前已使用的起始列 UsedRowEnd:Integer; //当前已使用的终止行 UsedColEnd:Integer; //当前已使用的终止列 CurRowBeg:Integer; //要使用的起始行 CurColBeg:Integer; //要使用的起始列 CurRowEnd:Integer; //要使用的终止行 CurColEnd:Integer; //要使用的终止列 //下面为类操作 Constructor Create(); //创建Excel对象 Destructor Destroy; virtual; //释放Excel对象 //Excel操作 procedure IsVisible(IsOrNo:Boolean); //控制Excel是否显示 procedure IsAlert(IsOrNo:Boolean); //控制Excel是否出现警告存盘的对话框 function SetActiveWindowGridVisible(IsVisible:Boolean=True):Boolean; //设置当前窗口网格的显示与否 function SaveToFile(AFileName:string):Boolean; //Excel数据保存到文件 procedure ExitExcel; //退出Excel //工作簿操作 function New_WorkBook:Boolean; //新建工作簿 function OpenExcelFile(FileName:string): Boolean; //打开指定的Excel文件 function IsWorkbookExit:Integer; //判断是否存在工作簿 //工作表操作 function SetCurrentSheet(SheetNum:Integer):Boolean; //设置当前工作表 function GetSheetsNameList(var FileName:TstringList):Boolean; //得到工作簿中工作表名称列表 function GetSheetRange:string; //获取当前工作表中的工作范围 function SetSheetPage(APageType,Orientation:Integer;LeftMargin,RightMargin,TopMargin, BottomMargin,HeaderMargin,FooterMargin:Double):Boolean; //对指定的工作表进行页面设置 //Range或Cell操作 function GetCell(Row,Col:Integer):Variant; //得到当前工作表中某行某列的值 procedure SetCell(Value: String; Row, Col: Integer;AType:Integer); //设置指定单元格的值 function GetRangeValue(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer):String; //获取指定范围的值 function SetRangeValue(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer;AValue:string):Boolean; //设置指定范围的值 function InsertPicIntoSheet(ABeginRow,ABeginCol:Integer;APicFile:String):Boolean;//向指定工作表中插入图片 function Sum(BeginRow,BeginCol,EndRow,EndCol:Integer):Double; //对指定单元格间的值求和 //文本框操作 function InsertTextBox(AX,AY,AWidth,AHeight:Double;AOrient:Integer=msoTextOrientationHorizontalRotatedFarEast):Variant;//在指定位置插入文本框 function SetTextBoxFillStyle(ATextBox:Variant;AVisible:Integer;ATransparency:Double=0):Boolean; //设置文本框填充样式 function SetTextBoxLineStyle(ATextBox:Variant;AVisible:Integer;ATransparency:Double=0):Boolean; //设置文本框边框样式 function SetTextBoxFontStyle(ATextBox:Variant;AFontName,AFontStyle:String; AFontSize:Integer = 12;AFontColor:Integer=0):Boolean; //设置文本框中字体样式 function SetTextBoxAlignment(ATextBox:Variant;HAlign:Integer=xlLeft;VAlign:Integer=xlBottom):Boolean; //设置文本框水平和垂直对齐方式 function SetTextBoxText(ATextBox:Variant;AText:string):Boolean; //设置文本框中文字内容 //格式化单元格操作 function MergeCells(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer):Variant; //合并单元格 procedure CellAutoFit; //设置单元格为自动列宽 //格式化行高和列宽 function SetColumnWidth(AColNum:Integer;AColWidth:Double):Boolean; //设置指定列的宽度 function SetRowHeight(ARowNum:Integer;ARowHeight:Double):Boolean; //设置指定行的行高 function SetRangeColWidth(ABeginRow,ABeginCol,AEndRow,AEndCol:Integer;AColWidth:Double):Boolean; //设置指定范围内单元格的列宽 //格式化指定区域范围 function SetRangeFontStyle(BeginRow,BeginCol,EndRow, EndCol:Integer; AFontStyle:string='常规';AFontName:string='宋体'; AFontColor:Integer=0;AFontSize:Integer=12):Boolean; //设置范围 function SetRowFontStyle(ARowNum:Integer;AFontStyle:string='常规';AFontName:string='宋体'; AFontColor:Integer=0;AFontSize:Integer=12):Boolean; //设置指定行的字体样式 function SetColumnFontStyle(AColNum:Integer;AFontStyle:string='常规';AFontName:string='宋体'; AFontColor:Integer=0;AFontSize:Integer=12):Boolean; //设置指定列的字体样式 function SetRangeOutBorderStyle(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer; AWeight:Integer=2;ALineColor:Integer=0;ALineStyle:Integer=xlContinuous):Boolean; //设置指定范围的外边框样式 function SetRowOutBorderStyle(ARowNum:Integer;AWeight:Integer=2; ALineColor:Integer=0;ALineStyle:Integer=xlContinuous):Boolean; //设置指定行的外边框样式 function SetColumnOutBorderStyle(AColNum:Integer;AWeight:Integer=2;ALineColor:Integer=0; //设置指定列的外边框样式 ALineStyle:Integer=xlContinuous):Boolean; function SetRangeInnerLineStyle(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer; AWeight:Integer=2;ALineColor:Integer=0;ALineStyle:Integer=xlContinuous):Boolean; //设置指定范围的分隔线样式 function SetRowInnerLineStyle(ARowNum:Integer;AWeight:Integer=2;ALineColor:Integer=0; ALineStyle:Integer=xlContinuous):Boolean; //设置指定行的分隔线样式 function SetColumnInnerLineStyle(AColNum:Integer;AWeight:Integer=2;ALineColor:Integer=0; ALineStyle:Integer=xlContinuous):Boolean; //设置指定列的分隔线样式 function SetRangeHorizontalAlignment(ABegRowNum,ABegColNum,AEndRowNum, AEndColNum:Integer;AAlign:Integer=xlLeft):Boolean; //设置范围的水平对其方式 function SetRangeVerticalAlignment(ABegRowNum,ABegColNum,AEndRowNum, AEndColNum:Integer;AAlign:Integer=xlBottom):Boolean; //设置范围的垂直对其方式 function SetRowHorizontalAlignment(ARowNum:Integer;AAlign:Integer=xlLeft):Boolean; //设置指定行的水平对其方式 function SetRowVerticalAlignment(ARowNum:Integer;AAlign:Integer=xlBottom):Boolean; //设置指定行的垂直平对其方式 function SetColumnHorizontalAlignment(AColNum:Integer;AAlign:Integer=xlLeft):Boolean; //设置指定列的水平对其方式 function SetColumnVerticalAlignment(AColNum:Integer;AAlign:Integer=xlBottom):Boolean; //设置指定列的垂直对其方式 function SetRangeAutoWrap(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer):Boolean; //设置指定区域格式为自动换行 function CancelRangeAutoWrap(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer):Boolean; //取消指定区域的自动换行 function SetRangeBackGround(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer; APattern:Integer=xlSolid;APatternColor:Integer=xlNone;ABackColor:Integer=xlNone):Boolean; //设置指定范围的背景图案 //格式化箭头线 function FormatArrowLineEndHead(ALine:Variant;AheadStyle:Integer=msoArrowheadTriangle; AheadLength:Integer=msoArrowheadLengthMedium;AheadWidth:Integer=msoArrowheadWidthMedium):Boolean; //格式化箭头线的末端样式 function FormatArrowLineBeginHead(ALine:Variant;AheadStyle:Integer=msoArrowheadTriangle; AheadLength:Integer=msoArrowheadLengthMedium;AheadWidth:Integer=msoArrowheadWidthMedium):Boolean; //格式化箭头线的首端样式 function FormatArrowLine(ALine:Variant;AWidth:Double=1.5;AStyle:Integer=msoLineSingle;ADashStyle:Integer=msoLineSolid):Boolean; //格式化箭头线的线样式 //数据库中数据转为Excel操作 procedure SetTheFieldsName(AFields:TStringList;BeginRow,BeginCol,FieldNumber:Integer;IsNeedXuHao:Boolean); //设置Excel工作表中的列名 procedure TransferDataToExcel(FieldValues:Array of TStringList;BeginRow,BeginCol,FieldNumber,RcdNumber:Integer;IsNeedXuHao:Boolean); //转换数据到Excel procedure DataToExcelUpPage(FieldValues:Array of TStringList;BeginRow,BeginCol,FieldNumber, RcdNumber:Integer;IsNeedXuHao:Boolean;IsHengXiangOrZongXiang:Boolean=False); //使用Excel将指定的数据打印输出 // procedure Print_PageSetup(); //打印页面设置 procedure Print_PrintView; //打印预览 procedure Print_PrintOut; //打印输出 // function Get_Template_Path():String; //获取模板路径 procedure Set_Template_Path(PathName:String); //设置模板路径 procedure Set_Template_OpenName(TemplateName:String); //设置打开模板的名称 function Open_Template():Variant; //打开模板 procedure Save_Template(); //保存模板 // procedure SetTableTitle(TitleName:String;BeginRow,BeginCol,Row,Col,FontSize:integer; IsNeedXuHao:Boolean=False;IsNeedFrame:Boolean=True); //设置表的标题(表头) //绘制平断面图 procedure CreatePage(APage: Integer;ABDZMC, AXLMC: String;AValueList: TStringList); //创建页 procedure FormatCells(APage, AColNum, ARow: Integer;AColName: String ;AValueList: TStringList); //绘制平断面图时根据不同情况格式化单元格 procedure GetCellDMGanCoord(APage, ACellIndex: Integer;var AX, AY: Double); //获取指定页,指定cell的断面杆的中心坐标 procedure CreateDMT(AX1, AY1, AGanGao: Double;AIsTJPole, AIsFirstPole, AIsCable: Boolean;var AOldY2: Double); //创建断面图 procedure GetCellGanCoord(APage, ACellIndex: Integer;var AX, AY: Double); //获取指定页,指定cell的杆的中心坐标 procedure CreateFZLine(AX, AY,AYOffSet,AAngle: Double;AXLMC: String); //画分支 创建转角箭头线 procedure CreateArrowheadLine(AX, AY, AAngle: Double); //创建转角箭头线 function DoubleToFenMiao(Jiao:Double):string; //双精度的度转换为度分秒 procedure DrawBYQText(AX, AY : Double;AText: String); //绘制变压器文本 procedure DrawBYQ(AX, AY : Double); //绘制变压器 function GetPoleHight(AHight: Double): Double; //以15米杆高为标准计算d当前杆塔图形高度 //暂不使用的功能 function FindTheExcelMainWindow:Integer; //辅助工程找出当前系统环境中的运行的excel的主窗体句柄: procedure DisableSystemCloseBox; //使当前Excel应用程序的关闭按钮失效 // Published { Published declarations } end; const RcdCountOfEachPageOfHengXiang=22; RcdCountOfEachPageOfZongXiang=44; var MyWindowPtr : ^TWindowObject; V_PageOffset: Double; implementation {实现部分} { Excel } { 功能描述:创建Excel对象 输入参数: 无 输出参数:无 创建时间: 2006-04-07 创建人: 赵占轻 } constructor TExcel.Create(); begin Inherited; try MyExcel:=CreateOleObject('Excel.Application'); //创建Excel对象 except end; // // New(MyWindowPtr); // end; { 功能描述:使用Excel将指定的数据打印输出 输入参数:FieldValues 待输出的数据列表 BeginRow 起始行号 BeginCol 起始列号 FieldNumber 字段数 RcdNumber 记录数 IsNeedXuHao 是否需要序号 IsHengXiangOrZongXiang 纵向还是横向 (True:纵向False:横向) 输出参数:无 创建时间:2006-04-13 创建人: 赵占轻 } procedure TExcel.DataToExcelUpPage(FieldValues: array of TStringList; BeginRow, BeginCol, FieldNumber, RcdNumber: Integer; IsNeedXuHao: Boolean;IsHengXiangOrZongXiang:Boolean=False); var nPageNumber,nLastPageRcdCount,i,nTmp:Integer; vSheet:Variant; begin if IsHengXiangOrZongXiang then begin nLastPageRcdCount:=(RcdNumber mod RcdCountOfEachPageOfZongXiang); nPageNumber:=((RcdNumber-nLastPageRcdCount) div RcdCountOfEachPageOfZongXiang); ntmp:=RcdCountOfEachPageOfZongXiang; end else begin nLastPageRcdCount:=(RcdNumber mod RcdCountOfEachPageOfHengXiang); nPageNumber:=((RcdNumber-nLastPageRcdCount) div RcdCountOfEachPageOfHengXiang); nTmp:=RcdCountOfEachPageOfHengXiang; end;// //循环执行打印工作: for i:=1 to nPageNumber do begin try vSheet:=Open_Template; //打开模板 except MyExcel.Quit; Exit; end;// TransferDataToExcel(FieldValues,BeginRow,BeginCol,FieldNumber,ntmp,IsNeedXuHao); //数据输出到Excel try Print_PrintOut; //从Excel中打印输出 except ShowMessage('打印机错误,请检查你的打印机设备是否正常!'); Exit; end;// end;// //执行剩余打印工作: if nLastPageRcdCount>0 then begin try vSheet:=Open_Template; except MyExcel.Quit; Exit; end;// TransferDataToExcel(FieldValues,BeginRow,BeginCol,FieldNumber,nLastPageRcdCount,IsNeedXuHao); try Print_PrintOut; except ShowMessage('打印机错误,请检查你的打印机设备是否正常!'); Exit; end;// end;// end; { 功能描述:释放Excel对象变量 输入参数:无 输出参数: 无 创建时间:2006-04-07 创建人: 赵占轻 } destructor TExcel.Destroy; begin // inherited; MyExcel:=UnAssigned; end; { 功能描述:使Excel程序关闭按钮失效 输入参数:无 输出参数:无 创建时间:2006-04-18 创建人: 刘惠城 } procedure TExcel.DisableSystemCloseBox; var hExcelWindow : HWND; hSysMenu : HMENU; nrlt:Integer; begin // Find the Excel2000 handle nrlt:=FindTheExcelMainWindow; if nrlt=0 then begin Exit; end else begin hExcelWindow:=MyWindowPtr.WinHandle; end;// if hExcelWindow <> 0 then begin hSysMenu := GetSystemMenu (hExcelWindow, false); EnableMenuItem (hSysMenu, SC_CLOSE, MF_DISABLED) end; end; //-------------------------------------------------------------------------// { 功能描述:退出Excel 输入参数:无 输出参数:无 创建时间:2003-11-09 创建人: 徐伟亮 } procedure TExcel.ExitExcel; begin try Book.Saved:=True; //自动退出Excel时保存修改内容 except end; MyExcel.Quit; end; { 功能描述:辅助工程找出当前系统环境中的运行的excel的主窗体句柄 输入参数:无 输出参数:1:找到结果;0:未找到结果 创建时间:2006-04-18 创建人: 刘惠城 } function TExcel.FindTheExcelMainWindow:Integer;//will alter function WindowCallback(WHandle : HWnd; Var Parm : Pointer) : Boolean; stdcall; {This function is called once for each window} Var MyString : PChar; MyInt : Integer; caption1:PChar; begin caption1:='Microsoft Excel'; MyString := Allocmem(255); GetWindowText(WHandle,MyString,255); if StrPos(MyString,caption1)=nil then begin //FreeMem(caption1,16); Result := True;//Not find,continue to enumerate windows; Exit; end;// // {Window Handle (Passed by the enumeration)} MyWindowPtr.WinHandle := WHandle; {Window text} MyWindowPtr.WinCaption := String(MyString); FreeMem(MyString,255); {Process ID} MyInt := 0; MyWindowPtr.ProcessID := GetWindowThreadProcessId(WHandle,@MyInt); {Visiblity} MyWindowPtr.IsVisible := IsWindowVisible(WHandle); {Enabled} MyWindowPtr.IsEnabled := IsWindowEnabled(WHandle); {Iconic} MyWindowPtr.IsIconic := IsIconic(WHandle); {Window Dimensions} MyWindowPtr.WindowRect := Rect(0,0,0,0); GetWindowRect(WHandle,MyWindowPtr.WindowRect); // Result := False; {Everything's okay.Stop to enumerate windows} end; // begin // EnumWindows(@WindowCallback,0); if MyWindowPtr.WinHandle = 0 then begin Result:=0; end else begin Result:=1; end; end; { 功能描述:获取模板路径 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } function TExcel.Get_Template_Path: String; begin // Result:=Template_Path; end; { 功能描述:控制是否出现警告存盘的对话框; 输入参数:IsOrNo:控制是否显示提示框 (True:显示提示框;False:不显示提示框) 输出参数:无 创建时间:2006-04-07 创建人: 赵占轻 } procedure TExcel.IsAlert(IsOrNo: Boolean); begin MyExcel.DisplayAlerts:=IsOrNo; //是否出现警告存盘的对话框; end; { 功能描述:控制是否显示Excel 输入参数:IsOrNo: (True:显示Excel;False:不显示Excel) 输出参数:无 创建日期:2003-10-20 创建人: 赵占轻 } procedure TExcel.IsVisible(IsOrNo: Boolean); begin if IsOrNo then begin MyExcel.Visible:= True; end else begin MyExcel.Visible :=False; end; end; { 功能描述:判断是否存在工作簿 输入参数:无 输出参数:0:不存在工作簿;1:存在工作簿 创建时间:2006-04-07 创建人: 赵占轻 } function TExcel.IsWorkbookExit: Integer; var nBookCount:Integer; begin nBookCount:=MyExcel.Workbooks.Count; //获取工作簿数量 if nBookCount<=0 then begin Result:=0; Exit; end;// Result:=1; end; { 功能描述:新建工作簿 输入参数:无 输出参数:执行成功返回真否则返回假 创建时间:2006-04-14 创建人: 赵占轻 } function TExcel.New_WorkBook:Boolean; begin {在启动Excel之前,最好将以前运行的实例关闭 因为有时会出现异常的情况;} //启动Excel应用程序: Result:=False; try if MyExcel.Workbooks.Count>=1 then //如果Excel已经启动, begin //且工作薄存在,则置 Book:=MyExcel.Workbooks[1]; //第一个工作薄为当前 Sheet:=MyExcel.Workbooks [1].Worksheets[1];//工作薄; Exit; end;// Book:=MyExcel.Workbooks.Add; if MyExcel.Worksheets.Count>=1 then begin Sheet:=Book.Worksheets.Item[1]; end; except Exit; end; Result:=True; end; { 功能描述:打开模板 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } function TExcel.Open_Template:Variant; var sTmp:String; begin //打开模板 if MyExcel.Workbooks.Count>=1 then begin Book:=MyExcel.Workbooks[1]; Book.Close; end;// sTmp:=Template_Path+Template_OpenName; Book:=MyExcel.Workbooks.Add (sTmp,0); Result:=MyExcel.Workbooks [1].Worksheets[1]; end; { 功能描述:打印页面设置 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Print_PageSetup; begin //打印设置 IsPageSetup:=MyExcel.Dialogs.Item[xlDialogPageSetup].Show( EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); end; { 功能描述:打印输出 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Print_PrintOut; begin Sheet.PrintOut(EmptyParam); end; { 功能描述:打印预览 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Print_PrintView; begin Sheet.PrintPreview; end; { 功能描述:保存模板 输入参数:无 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Save_Template; var sTmp:String; begin //保存模板 sTmp:=Template_Path+Template_Name; Book.SaveAs(sTmp,xlTemplate); end; { 功能描述:设置表的标题 输入参数:TitleName 标题名称 BeginRow 开始行 BeginCol 开始列 Row 所占用的行数 Col 列数 FontSize 字体大小 IsNeedXuHao 是否需要序号 IsNeedFrame 是否需要框架 输出参数:无 创建时间:2003-10-20 创建人: 赵占轻 } procedure TExcel.SetTableTitle(TitleName: String; BeginRow,BeginCol,Row, Col,FontSize: integer; IsNeedXuHao:Boolean=False;IsNeedFrame:Boolean=True); var vRange,vCell1,vCell2:Variant; nCol,nRow:Integer; sTitleName:String; begin sTitleName:=TitleName; //记录标题名 nCol:=Col; //记录标题所占用的列数 nRow:=Row; //记录标题所占用的行数 vCell1:=Sheet.Cells[BeginRow,BeginCol]; //记录起始单元格 if IsNeedXuHao then //需要序号 begin MergeCells(BeginRow,BeginCol,nRow,nCol+1); //合并单元格 SetRangeHorizontalAlignment(BeginRow,BeginCol,nRow,nCol+1,xlHAlignCenter);//水平对其方式为居中 SetRangeVerticalAlignment(BeginRow,BeginCol,nRow,nCol+1,xlVAlignCenter); //垂直对其方式为居中 //设置字体样式 SetRangeFontStyle(BeginRow,BeginCol,nRow,nCol+1,'正常','宋体',5,FontSize); //设置指定范围的字体样式 SetRangeValue(BeginRow,BeginCol,nRow,nCol+1,sTitleName); //设置标题 if IsNeedFrame then //需要边框 begin SetRangeOutBorderStyle(BeginRow,BeginCol,nRow,nCol,1,0,1); end; end else //不需要序号 begin MergeCells(BeginRow,BeginCol,nRow,nCol); //合并单元格 SetRangeHorizontalAlignment(BeginRow,BeginCol,nRow,nCol,xlHAlignCenter);//水平对其方式为居中 SetRangeVerticalAlignment(BeginRow,BeginCol,nRow,nCol,xlVAlignCenter); //垂直对其方式为居中 //设置字体样式 SetRangeFontStyle(BeginRow,BeginCol,nRow,nCol,'正常','宋体',5,FontSize); //设置指定范围的字体样式 SetRangeValue(BeginRow,BeginCol,nRow,nCol,sTitleName); if IsNeedFrame then //需要边框 begin SetRangeOutBorderStyle(BeginRow,BeginCol,nRow,nCol,1,0,1); end; end; end; { 功能描述:设置Excel工作表中的列名 输入参数: AFields 列名列表 BeginRow 起始行号 BeginCol 起始列号 FieldNumber 列数 IsNeedXuHao 是否需要序号 输出参数:无 创建时间:2006-04-13 创建人: 赵占轻 } procedure TExcel.SetTheFieldsName(AFields:TStringList;BeginRow,BeginCol,FieldNumber:Integer;IsNeedXuHao:Boolean); var vRange,vCell1,vCell2:Variant; nCol,i,j:Integer; sValue:String; begin nCol:=BeginCol+FieldNumber-1; //从数据库中读出字段名并输出到第一列: vCell1:=Sheet.Cells[BeginRow,BeginCol]; vCell2:=Sheet.Cells[BeginRow,nCol]; vRange:=Sheet.Range[vCell1,vCell2]; // SetRangeFontStyle(vRange,'常规','宋体',5,13); //设置指定范围的字体样式 if IsNeedXuHao then begin Sheet.Cells[BeginRow,BeginCol]:='序号'; for i:=BeginCol to FieldNumber do begin sValue:=AFields[i-1]; Sheet.Cells[BeginRow,i+1]:=sValue; Sheet.Cells[BeginRow,i+1].Borders.LineStyle:=1; end; exit; end; //-----------------------------------------// j:=0; for i:=BeginCol to FieldNumber+BeginCol-1 do begin sValue:=AFields[j]; Sheet.Cells[BeginRow,i].Borders.LineStyle:=1; Sheet.Cells[BeginRow,i]:=sValue; Sheet.Cells[BeginRow,i].HorizontalAlignment:= xlHAlignCenter; Sheet.Cells[BeginRow,i].VerticalAlignment:=xlVAlignCenter; j:=j+1; end; end; { 功能描述:设置打开模板的名称 输入参数: TemplateName:模板名称 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Set_Template_OpenName(TemplateName: String); begin // Template_OpenName:=TemplateName; end; { 功能描述:设置模板路径 输入参数:PathName:路径名 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.Set_Template_Path(PathName: String); begin // Template_Path:=PathName; end; { 功能描述:转换数据到Excel 输入参数:FieldValues 字段值列表 BeginRow 起始行号 BeginCol 起始列号 FieldNumber 字段数 RcdNumber 记录数 IsNeedXuHao 是否需要序号 输出参数:无 创建时间:2006-04-13 创建人: 赵占轻 } procedure TExcel.TransferDataToExcel(FieldValues:Array of TStringList; BeginRow, BeginCol, FieldNumber,RcdNumber: Integer; IsNeedXuHao: Boolean); var i,j,nSerial:Integer; sValue:String; begin // //设置序号值: if IsNeedXuHao then begin nSerial:=1; for i:=BeginRow to BeginRow+RcdNumber do // begin // Sheet.Cells[i,BeginCol].Borders.LineStyle:=1; Sheet.Cells[i,BeginCol]:=nSerial; Sheet.Cells[i,BeginCol].HorizontalAlignment:= xlHAlignCenter; Sheet.Cells[i,BeginCol].VerticalAlignment:=xlVAlignCenter; // if i=BeginRow+RcdNumber-1 then begin break; end;// nSerial:=nSerial+1; end;// BeginCol:=BeginCol+1; end;// // 传输数据到Excel工作表 for i:=0 to RcdNumber-1 do begin for j:=0 to FieldNumber-1 do begin sValue:=FieldValues[i][j] ; Sheet.Cells[BeginRow+i,BeginCol+j].Borders.LineStyle:=1; Sheet.Cells[BeginRow+i,BeginCol+j]:=sValue; Sheet.Cells[BeginRow+i,BeginCol+j].HorizontalAlignment:= xlHAlignCenter; Sheet.Cells[BeginRow+i,BeginCol+j].VerticalAlignment:=xlVAlignCenter; end;// end;// end; { 功能描述:得到当前工作表中某行某列的值 输入参数:Row:指定行号; Col:指定单元格列号 输出参数:返回指定单元格的值 创建时间:2006-04-11 创建人: 赵占轻 } function TExcel.GetCell(Row,Col:Integer):Variant; begin if (Row=0) or (Col=0) then begin Result:=-1; Exit; end; Result:=Sheet.Cells[Row,Col]; end; { 功能描述:对指定单元格间的值求和 输入参数:BeginRow 起始单元格的行号 BeginCol 起始单元格的列号 EndRow 终止单元格的行号 EndCol 终止单元格的列号 输出参数:返回总和值 创建时间:2006-04-11 创建人: 赵占轻 } function TExcel.Sum(BeginRow,BeginCol,EndRow,EndCol:Integer):Double; var dTotal:Double; vRange,vCell1,vCell2:Variant; begin vCell1:=Sheet.Cells[BeginRow,BeginCol]; //获取起始单元格 vCell2:=Sheet.Cells[EndRow,EndCol]; //获取终止单元格 vRange:=MyExcel.Range[vCell1,vCell2]; //计算总和 dTotal:=MyExcel.Sum (vRange,vRange,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam); // Result:=dTotal/2.0; end;// { 功能描述:设置指定单元格的值 输入参数:Value: 设置的单元格的值 Row: 指定单元格的行号 Col: 指定单元格的列号 AType:单元格值的类型 (0:字符型;1:整形;2,3:数值型) 输出参数:无 创建时间:2006-04-11 创建人: 赵占轻 } procedure TExcel.SetCell(Value: String; Row, Col: Integer;AType:Integer); begin case AType of 0: //字符型 begin //格式化单元格为文本样式,确保数据格式正确 Sheet.Cells[Row,Col].NumberFormatLocal:='@'; end; 1: //整型 begin Sheet.Cells[Row,Col].NumberFormatLocal:='0'; end; 2: begin //格式化单元格为文本样式,确保数据格式正确 Sheet.Cells[Row,Col].NumberFormatLocal:='0.00000'; end; 3: //浮点型 begin Sheet.Cells[Row,Col].NumberFormatLocal:='0.00000'; end; end; Sheet.Cells[Row,Col]:=Value; end; { 功能描述:设置单元格为自动列宽 输入参数:无 输出参数:无 创建时间:2003-11-20 创建人: 赵占轻 } procedure TExcel.CellAutoFit; begin MyExcel.Columns.AutoFit; end; { 功能描述: 打开指定的Excel文件 输入参数: FileName:要打开的文件名 如:c:\test.xls 输出参数: 执行成功返回真否则返回假 创建时间: 2006-04-07 设计人: 赵占轻 } function TExcel.OpenExcelFile(FileName: string): Boolean; begin Result:=False; try Book:=MyExcel.Workbooks.Open(FileName); Sheet:=Book.WorkSheets.Item[1]; except Exit; end; Result:=True; end; { 功能描述: 得到指定的工作表 输入参数: SheetNum:工作表顺序号;ASheet:记录获取的工作表 输出参数: 执行成功返回真否则返回假 输入输出参数:ASheet:返回获取的工作表 创建时间: 2006-04-11 创建人: 赵占轻 } { 功能描述:获取当前活动工作簿中指定工作表的工作范围 输入参数:ASheet:要操作的工作表;SheetNum:指定工作簿中工作表的序号 输出参数:工作区地址字符串 如"A1:Z200" 创建时间: 2006-04-07 创建人: 赵占轻 } function TExcel.GetSheetRange:string; var sTemp:String; i:Integer; begin sTemp:=Sheet.UsedRange.AddressLocal; //取指定工作表中的工作范围 //分析字符串提取行列号 for i:=1 to Length(sTemp) do begin if sTemp[i]<>'$' then begin Result:=Result+sTemp[i]; end; end; if Pos(':',ReSult)=0 then begin UsedRowBeg:=GetRowNum(ReSult); //起始行号 UsedColBeg:=GetColNum(Result); //起始列号 UsedRowEnd:=UsedRowBeg; //终止行号 UsedColEnd:=UsedColBeg; //终止列号 Result:=Result+':'+Result; end else begin sTemp:=Copy(Result,1,Pos(':',Result)-1); UsedRowBeg:=GetRowNum(sTemp); //起始行号 UsedColBeg:=GetColNum(sTemp); //其实列号 sTemp:=Copy(Result,Pos(':',Result)+1,Length(Result)-Pos(':',Result)); UsedRowEnd:=GetRowNum(sTemp); //终止行号 UsedColEnd:=GetColNum(sTemp); //终止列号 end; end; { 功能描述:获取指定单元格的列号 输入参数: TStr:单元格地址 输出参数: 单元格列号 创建时间: 2006-04-07 创建人: 赵占轻 } function TExcel.GetColNum(TStr:string):Integer; begin Result:=StrToInt(Sheet.Range[TStr].Cells.Column); end; { 功能描述:获取指定单元格的行号 输入参数: TStr:单元格地址 输出参数: 单元格行号 创建时间: 2006-04-07 创建人: 赵占轻 } function TExcel.GetRowNum(TStr:string):Integer; begin Result:=StrToInt(Sheet.Range[TStr].Cells.Row); end; { 功能描述: 得到当前工作簿中所有工作表名称 输入参数: FileName:用于返回获取的所有工作表名称 输出参数: 操作结果 True:执行成功;False: 执行失败 输入输出参数:FileName:用于返回获取的所有工作表名称 创建时间: 2003-10-24 创建人: 赵占轻 } function TExcel.GetSheetsNameList(var FileName:TstringList):Boolean; var i:Integer; vSheet:Variant; begin try for i:=1 to MyExcel.ActiveWorkbook.Sheets.Count do begin vSheet:=MyExcel.ActiveWorkbook.Worksheets[i]; //获取第i个工作表 FileName.Add(VSheet.Name); //记录第i个工作表的名称 end; except Result:=False; Exit; end; Result:=True; end; { 功能描述:合并单元格 输入参数:ABegRowNum: 待合并单元格的起始行号 ABegColNum: 起始列号 AEndRowNum: 终止行号 AEndColNum: 终止列号 输出参数: 返回合并后的单元格 创建时间: 2006-04-11 创建人: 赵占轻 } function TExcel.MergeCells(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer):Variant; //合并单元格 var vRange:Variant; vBegCell,vEndCell:Variant; begin try vBegCell:=Sheet.Cells[ABegRowNum,ABegColNum]; vEndCell:=Sheet.Cells[AEndRowNum,AEndColNum]; vRange:=Sheet.Range[vBegCell,vEndCell]; //获取指定单元格间的范围 vRange.Merge; //合并单元格 Result:=vRange; except Result:=Null; end; end; { 功能描述:设置指定范围单元格的字体样式 输入参数:BeginRow 指定范围的起始单元格行号; BeginCol 指定范围的起始单元格列号; EndRow 指定范围的终止单元格行号 EndCol 指定范围的终止单元格列号 AFontStyle 目标字体样式(如粗体); AFontName 目标字体名称; AFontSize 目标字体大小 AFontColor 目标字体颜色 输出参数:执行成功返回真;否则返回假 创建时间:2006-04-12 创建人: 赵占轻 } function TExcel.SetRangeFontStyle(BeginRow,BeginCol,EndRow, EndCol:Integer; AFontStyle:string='常规';AFontName:string='宋体'; AFontColor:Integer=0;AFontSize:Integer=12):Boolean; //设置范围 var vRange:Variant; vBegCel,vEndCell:Variant; begin try vBegCel:=Sheet.Cells[BeginRow,BeginCol]; vEndCell:=Sheet.Cells[EndRow, EndCol]; vRange:=Sheet.Range[vBegCel,vEndCell]; vRange.Font.ColorIndex:=AFontColor; //设置字体颜色 vRange.Font.Name:=AFontName; //设置字体名称 vRange.Font.Size:=AFontSize; //设置字体大小 vRange.Font.FontStyle:=AFontStyle; //设置字体样式 except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置指定范围的外边框样式 输入参数:ABegRowNum 待设置范围的起始行号 ABegColNum 待设置范围的起始列号 AEndRowNum 待设置范围的终止行号 AEndColNum 待设置范围的终止列号 AWeight 边线粗度 ALineColor 边线颜色 ALineStyle 边线样式 输出参数:执行成功返回真否则返回假 创建时间:2006-05-08 创建人: 赵占轻 } function TExcel.SetRangeOutBorderStyle(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer; AWeight:Integer=2;ALineColor:Integer=0;ALineStyle:Integer=xlContinuous):Boolean; var vBegCell,vEndCell:Variant; vRange:Variant; begin vBegCell:=Sheet.Cells[ABegRowNum,ABegColNum]; vEndCell:=Sheet.Cells[AEndRowNum,AEndColNum]; vRange:=Sheet.Range[vBegCell,vEndCell]; try //设置左边框 vRange.Borders.Item[xlEdgeLeft].LineStyle :=ALineStyle; vRange.Borders.Item[xlEdgeLeft].Weight := AWeight; vRange.Borders.Item[xlEdgeLeft].ColorIndex := ALineColor; except Result:=False; Exit; end; try //设置顶边框 vRange.Borders.Item[xlEdgeTop].LineStyle := ALineStyle; vRange.Borders.Item[xlEdgeTop].Weight := AWeight; vRange.Borders.Item[xlEdgeTop].ColorIndex := ALineColor; except Result:=False; Exit; end; try //设置底边框 vRange.Borders.Item[xlEdgeBottom].LineStyle := ALineStyle; vRange.Borders.Item[xlEdgeBottom].Weight := AWeight; vRange.Borders.Item[xlEdgeBottom].ColorIndex := ALineColor; except Result:=False; Exit; end; try //设置右边框 vRange.Borders.Item[xlEdgeRight].LineStyle := ALineStyle; vRange.Borders.Item[xlEdgeRight].Weight := AWeight; vRange.Borders.Item[xlEdgeRight].ColorIndex := ALineColor; except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置指定范围的分隔线样式 输入参数:ABegRowNum 待设置范围的起始行号 ABegColNum 待设置范围的起始列号 AEndRowNum 待设置范围的终止行号 AEndColNum 待设置范围的终止列号 AWeight 分割线粗度 ALineColor 分割线颜色 ALineStyle 分割线样式 输出参数:执行成功返回真否则返回假 创建时间:2006-04-13 创建人: 赵占轻 } function TExcel.SetRangeInnerLineStyle(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer; AWeight:Integer=2;ALineColor:Integer=0;ALineStyle:Integer=xlContinuous):Boolean; //设置指定范围的分隔线样式 var vBegCell,vEndCell:Variant; vRange:Variant; begin vBegCell:=Sheet.Cells[ABegRowNum,ABegColNum]; vEndCell:=Sheet.Cells[AEndRowNum,AEndColNum]; vRange:=Sheet.Range[vBegCell,vEndCell]; try //设置垂直线样式 vRange.Borders.Item[xlInsideVertical].LineStyle :=ALineStyle; vRange.Borders.Item[xlInsideVertical].Weight := AWeight; vRange.Borders.Item[xlInsideVertical].ColorIndex := ALineColor; except Result:=False; Exit; end; try //设置水平线样式 vRange.Borders.Item[xlInsideHorizontal].LineStyle := ALineStyle; vRange.Borders.Item[xlInsideHorizontal].Weight := AWeight; vRange.Borders.Item[xlInsideHorizontal].ColorIndex := ALineColor; except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置当前工作表,并将指定的工作表存储到类属性Sheet中供其他操作使用 输入参数:待指定的工作表的序号 输出参数:执行成功返回真否则返回假 创建时间:2006-04-13 创建人: 赵占轻 } function TExcel.SetCurrentSheet(SheetNum:Integer):Boolean; //设置当前工作簿 begin Result:=False; try Sheet:=MyExcel.Worksheets.Item[SheetNum]; Result:=True; except end; end; { 功能描述:设置范围的水平对其方式 输入参数:ABegRowNum 待设置的范围的起始行号 ABegColNum 待设置的范围的起始列号 AEndRowNum 待设置的范围的终止行号 AEndColNum 待设置的范围的终止列号 AAlign 对其方式 输出参数:执行成功返回真否则返回假 创建时间:2006-04-13 创建人: 赵占轻 } function TExcel.SetRangeHorizontalAlignment(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer;AAlign:Integer=xlLeft):Boolean; var vBegCell,vEndCell:Variant; vRange:Variant; begin try vBegCell:=Sheet.Cells[ABegRowNum,ABegColNum]; vEndCell:=Sheet.Cells[AEndRowNum,AEndColNum]; vRange:=Sheet.Range[vBegCell,vEndCell]; vRange.HorizontalAlignment:= AAlign; //水平对其方式为居中 except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置范围的垂直对其方式 输入参数:ABegRowNum 待设置的范围起始行号 ABegColNum 待设置的范围起始列号 AEndRowNum 待设置的范围终止行号 AEndColNum 待设置的范围终止列号 AAlign 对其方式 输出参数:执行成功返回真否则返回假 创建时间:2006-04-13 创建人: 赵占轻 } function TExcel.SetRangeVerticalAlignment(ABegRowNum,ABegColNum,AEndRowNum,AEndColNum:Integer;AAlign:Integer=xlBottom):Boolean; //设置范围的垂直对其方式 var vBegCell,vEndCell:Variant; vRange:Variant; begin try vBegCell:=Sheet.Cells[ABegRowNum,ABegColNum]; vEndCell:=Sheet.Cells[AEndRowNum,AEndColNum]; vRange:=Sheet.Range[vBegCell,vEndCell]; vRange.VerticalAlignment:= AAlign; //垂直对其方式为居中 except Result:=False; Exit; end; Result:=True; end; { 功能描述:对指定的工作表进行页面设置 输入参数:APageType: 纸张类型; Orientation: 页面方向(横向或纵向) LeftMargin: 左边距 RightMargin: 右边距 TopMargin: 上边距 BottomMargin: 下边距 HeaderMargin: 页眉到顶端边距 FooterMargin: 页脚到底端边距 输出参数:执行成功返回真否则返回假 创建时间: 2006-04-18 创建人: 赵占轻 } function TExcel.SetSheetPage(APageType,Orientation:Integer;LeftMargin,RightMargin, TopMargin,BottomMargin,HeaderMargin,FooterMargin:Double):Boolean; begin try //页面设置 Sheet.PageSetup.PaperSize := APageType; // 设定纸张 Sheet.PageSetup.Orientation := Orientation;// 横向纸张 //设定页边距 Sheet.PageSetup.LeftMargin := MyExcel.InchesToPoints(LeftMargin); Sheet.PageSetup.RightMargin := MyExcel.InchesToPoints(RightMargin); Sheet.PageSetup.TopMargin := MyExcel.InchesToPoints(TopMargin); Sheet.PageSetup.BottomMargin := MyExcel.InchesToPoints(BottomMargin); //1cm Sheet.PageSetup.HeaderMargin := MyExcel.InchesToPoints(HeaderMargin); Sheet.PageSetup.FooterMargin := MyExcel.InchesToPoints(FooterMargin); except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置指定列的宽度 输入参数:AColNum: 待设置的列的列号 AColWidth:目标列宽 输出参数:执行成功返回真否则返回假 创建时间:2006-04-13 创建人: 赵占轻 } function TExcel.SetColumnWidth(AColNum:Integer;AColWidth:Double):Boolean; begin try Sheet.Columns[AColNum].ColumnWidth:=AColWidth; except Result:=False; Exit; end; Result:=True; end; { 功能描述:设置指定范围内单元格的列宽 输入参数:ABeginRow 指定范围的起始行号 ABeginCol 指定范围的起始列号 AEndRow 指定范围的终止行号 AEndCol 指定范围的终止列号 AColWidth:列宽 输出参数:执行成功返回真否则返回假 创建时间:2006-04-17 创建人: 赵占轻 } function TExcel.SetRangeColWidth(ABeginRow,ABeginCol,AEndRow,AEndCol:Integer;AColWidth:Double):Boolean; var vRange,vBeginCell,vEndCell:Variant; begin try vBeginCell:=Sheet.Cells[ABeginRow,ABeginCol]; vEndCell:=Sheet.Cells[AEndRow,AEndCol]; vRange:=Sheet.Range[vBeginCell,vEndCell]; vRange.ColumnWidth:=AColWidth; except Result:=False; Exit; end; Result:=True; end; { 功能描述:绘制平断面图时根据不同情况格式化单元格 输入参数:APage 当前页号 AColNum 列数 ARow 行号 AColName 列名 AValueList 待填充的值的列表 输出参数:无 创建时间:2006-04-18 创建人: 赵占轻 } procedure TExcel.FormatCells(APage, AColNum, ARow: Integer;AColName: String;AValueList: TStringList); var nBegRow,nEndRow:Double; i: Integer; sValue: String; nIndex: Integer; dX,dY: Double; dX1, dY1: Double; nPageTop:Integer; dAngle: Double; dOldY2: Double; dGanGao: Double; bIsFirstPole, bIsTJPole: Boolean; bIsCable: Boolean; begin dAngle:=0; nPageTop := (APage-1)*pm_PageRows; //每页行数 //处理行高 case ARow of 6, 13: begin //情况特殊,需要加高 Sheet.Rows[nPage |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论