做法是双击选定区域右侧的边线是各列的宽度自动适应内容的长度。
在Delphi中通过AutoFit方法也可实现自适应的列宽行高,需要注意的是该方法仅能用于整行整列,否则会提示OLE方法拒绝执行的错误: wkSheet.Columns.EntireColumn.AutoFit;
中式报表通常需要上下封顶的表格线,可以使用Borders集合属性。
要注意,VBA中的集合对象通常都有一个缺省的Item属性,Delphi中是不能省略的。
Weight属性用于定义表格线的粗细: with Aname.RefersToRange,Borders do begin HorizontalAlignment:= xlRight;
Item[xlEdgeBottom].Weight:=xlMedium;
Item[xlEdgeTop].Weight:=xlMedium;
Item[xlInsideHorizontal].Weight:=xlThin;
item[xlInsideVertical].Weight:=xlThin;
end;
页面设置与打印页面设置是通过工作表的PageSetUp对象属性设置的。
Excel VBA中预设了40余种纸张常量,需要注意的是某些打印机只支持其中的一部分纸张类型。
属性Orientation用于控制打印的方向,常量landscape.2表示横向打印。
布尔属性CenterHorizontally和CenterVertically用于确定打印的内容是否在水平和垂直方向上居中。
with wkSheet.PageSetUp do begin PaperSize:=xlPaperA4;
//Paper type A4 PrintTitleRows := ''A1:D1'';
//Repeat this row/page LeftMargin:=18;
//0.25"
Left Margin RightMargin:=18;
//0.25"
will vary between printers TopMargin:=36;
//0.5"
BottomMargin:=36;
//0.5"
CenterHorizontally:=True;
Orientation:=1;
//横向打印(landscape)=2, portrait=1 end;
打印报表可以调用工作表的PrintOut方法,VBA定义的该方法共有8个可选参数,前两个用于规定起止页,第三格式打印的份数,不过在Delphi中为其在最后增加了一个LCID参数,而且该参数不能使用EmptyParam。
类似地,打印预览方法PrintPreview在VBA中没有参数,而在Delphi中调用需要两个参数。
// wkBook.PrintPreview(True,LCID);
//for previewing wkSheet.PrintOut(EmptyParam,EmptyParam,1, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,LCID);
命名区域与宏如果报表的格式比较复杂,为特定的表格区域命名然后按名引用是一种比较好的方法。
Names是WorkBook的一个集合对象属性,它有一个的Add方法可以完成这项工作。
Var Aname.Excel2000.Name;
…… Aname := wkBook.Names.Add(''通讯录'',''=Sheet1!$A$3:$D$7'', EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam);
其中Add函数的第一个参数是定义的名称,第二个参数是名称所表示的单元格区域。
要注意区域名称的类型必须使用限定符,如果使用类型库(D4),则限定符为Excel_TLB。
此外,命名的区域应使用绝对引用方式,即加上“$”符号。
一旦命名了一个区域,就可以使用这个名称来引用它,下面的一行代码使通讯录内容以粗体显示: AName.RefersToRange.Font.Bold:=True;
不过最令人惊喜的也许是你能够在Delphi中动态地修改Excel宏
程序!下面的代码为我们的工作簿创建了一个宏,在关闭工作簿时记录上一次访问的时间: var LineNo: integer;
CM: CodeModule;
sDate:String;
begin CM := WkBook.VBProject.VBComponents.Item(''ThisWorkbook'').Codemodule;
LineNo := CM.CreateEventProc(''BeforeClose'', ''Workbook'');
SDate:=''上次访问日期:''+DateToStr(Date());
CM.InsertLines(LineNo.1,.Range("
B2"
).Value."
''+sDate+''"
'');
End;
修改宏需要在前面的uses一节加上一个单元:VBIDE2000,如果使用类型库则相应的单元为VBIDE_TLB。
这段代码的关键是CodeModule对象,遗憾的是在Excel VBA help文中找不到该对象的踪