|
发表于 2006-8-23 09:11:09
|
显示全部楼层
procedure TDDBG.OnSheetCreated(Sender: TObject; ASheet: TSheet);
var
lCell: TSheetCell;
lBorder: TCellSideBorder;
begin
// ASheet 从 0, 0 开始,通过ASheet.Areas 可以对数据集区域进行访问
// 表头部分
// 区域开始列, 默认有一个数据集区域,通过 TDataSheetArea(ASheet.Areas[0]) 访问
ASheet.RowCount := ASheet.RowCount + 1; // 08-22: 把表格文档扩大一行,注意不是扩大区域。用来画区域尾
with lBorder do // 08-22: 下方新增一行后会造成该行有边框,这里的目的是要消除该边框
begin
Line := TCellSideLine.slNone;
Color := Graphics.clNone;
end;
// 08-22: 区域的[0,0]不能修改,下面的ASheet.RowHeights[0] := 0;就是已经把这行隐藏掉了
ASheet.RowHeights[0] := 0; //30;
ASheet.RowHeights[1] := 30; // 08-22: 下面的几个区域头和页头的纵坐标都依次扩大行,用以跟新的坐标向匹配。
lCell := ASheet.Cells[ASheet.Areas[0].Left + 2, 1]; //[列位置,行位置]
lCell.Width := 3;
lCell.Value := '仅在报表第一页需打印的标题';
lCell := ASheet.Cells[ASheet.Areas[0].Left + 2, 2];
lCell.Value := '报表页标题';
lCell.Width := 2;
ASheet.RowHeights[2] := 30;
lCell.Font.Size := 18; // 设置字体
ASheet.Insert(3, 3, TSheetOperate.soAllRow, 0, 1); // 08-22: 表格打印默认在列头上面就有两行空行,如果还需要添加页头或者区域头就需要新增一行再做操作
lCell := ASheet.Cells[0, 3]; // 08-22:
lCell.Width := 6;
lCell.Border[TCellSide.sTop] := lBorder;
ASheet.CellTypes[ASheet.Areas[0].Right - 1, 3] := TCellType.ctExpression;
TExprCell(ASheet.Cells[ASheet.Areas[0].Right - 1, 3]).Expression.Text := '''第''+CAST(PageNumber() AS VARCHAR)+''页、共''+CAST(PageCount() AS VARCHAR)+''页''';
TExprCell(ASheet.Cells[ASheet.Areas[0].Right - 1, 3]).HorzAlign := THorzAlign.haRight;
// 08-22:这里的页尾和区域尾的纵坐标都是区域的坐标,在最后才把区域向下扩大一行
lCell := ASheet.Cells[ASheet.Areas[0].Left, ASheet.Areas[0].Bottom];
lCell.Value := '填表人:';
lCell.Font.Size := 14; // 设置字体
lCell.Color := Graphics.clRed; // 设置背景色
ASheet.CellTypes[ASheet.Areas[0].Left + 1, ASheet.Areas[0].Bottom] := TCellType.ctExpression;
lCell := ASheet.Cells[ASheet.Areas[0].Left + 1, ASheet.Areas[0].Bottom];
TExprCell(lCell).Expression.Text := 'OperatorName()'; // 填写填表人,通过函数取值, 这里同样可以采用参数
ASheet.CellTypes[ASheet.Areas[0].Right - 3, ASheet.Areas[0].Bottom] := TCellType.ctExpression;
lCell := ASheet.Cells[ASheet.Areas[0].Right - 3, ASheet.Areas[0].Bottom];
lCell.Width := 3; // 融合区域右下方三个的单元格
TExprCell(lCell).Expression.Text := 'Now()'; // 设置表达式, 取当前时间
lCell.HorzAlign := THorzAlign.haRight; // 右对齐
lCell.DispType := TCellDispType.dtDate; // 单元格按日期型显示
lCell.Format := '''日期: ''YYYY''年''MM''月''DD''日'''; // 日期时间型的显示格式,具体可以参考delphi的FormatDataTime函数的格式参数
lCell := ASheet.Cells[ASheet.Areas[0].Left, ASheet.Areas[0].Bottom + 1];
lCell.Value := '客户签名:';
lCell.Width := 2;
lCell.Font.Size := 14; // 设置字体
ASheet.Areas[0].Top := ASheet.Areas[0].Top - 2 - 1; // 08-22: 多出一行区域头
ASheet.Areas[0].Bottom := ASheet.Areas[0].Bottom + 1 + 1; // 08-22: 多出一行区域尾
ASheet.Areas[0].HeaderRows := 1; // 08-22: 区域头
ASheet.Areas[0].PageHeaderRows := 2 + 2; //HT:2行大小标题 + 两行复合列标题
ASheet.Areas[0].PageFooterRows := 1 ; //HT:1行页脚标题
ASheet.Areas[0].FooterRows := 1; // 08-22: 区域尾
// 通过Save方法可以把对象存储下来,通过辅助工具查看
// ASheet.SaveToFile('d:\1.jsc');
end;
无论结果如何,请楼主给与我们反馈。 |
|