procedure MergeCells( AhsMerge, // 合并栏目方式:0:横,1:竖:
AhsCount, // 合并循环方式:0:横,1:坚;
ACellsNum, // 合并栏目数:两并一或者三并一
ARow,ACol, // 起始行列号:数字
ACount:integer; // 总共合并多少次
ExcelSheet: Variant // 数据表指针
);
// 按照指定位置,数量合并单元格
var
i,j,l,k:Integer;
StartColChar, EndColChar:Char;
SS,SE:String;
begin
// if not Assigned(ExcelSheet) then exit;
try
i := 0;
j := 0;
while i < ACount do
begin
case AhsCount of
0: //横向总数合并
begin
case AhsMerge of
0: //横向合并列 横横
begin
//StartColChar := Char(Ord('A')+(ACol - 1 + ACellsNum * (i + 1) - ACellsNum));
l := (ACol - 1 + ACellsNum * (i + 1) - ACellsNum);
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SS := Char(Ord('A') + k-1);
StartColChar := Char(Ord('A')+ (l mod 26));
end
else
begin
SS :='';
StartColChar := Char(Ord('A')+ l);
end;
//------------------------------------------------------------------------------
//EndColChar := Char(Ord('A')+(ACol - 1 + ACellsNum * (i + 1) - 1));
l := (ACol - 1 + ACellsNum * (i + 1) - 1);
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SE := Char(Ord('A') + k-1);
EndColChar := Char(Ord('A')+ (l mod 26));
end
else
begin
SE :='';
EndColChar := Char(Ord('A')+ l);
end;
//------------------------------------------------------------------------------
SS := SS + StartColChar + IntToStr(ARow);
SE := SE + EndColChar + IntToStr(ARow);
end;
1: //纵向合并行 横纵
begin
// StartColChar := Char(Ord('A')+(ACol-1 + i));
// EndColChar := Char(Ord('A')+(ACol-1 + i));
l := ACol-1 + i;
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SS := Char(Ord('A') + k-1);
SE := Char(Ord('A') + k-1);
StartColChar := Char(Ord('A')+(l mod 26));
EndColChar := Char(Ord('A')+(l mod 26));
end
else
begin
SS := '';
SE := '';
StartColChar := Char(Ord('A')+l);
EndColChar := Char(Ord('A')+l);
end;
//------------------------------------------------------------------------------
SS := SS + StartColChar + IntToStr(ARow);
SE := SE + EndColChar + IntToStr(ARow+ACellsNum-1);
end;
end;
end;
1: //纵向总数合并
begin
case AhsMerge of
0: //横向合并列 纵横
begin
// StartColChar := Char(Ord('A')+(ACol - 1));
// EndColChar := Char(Ord('A')+(ACol -1 + (ACellsNum - 1)));
l := (ACol - 1);
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SS := Char(Ord('A') + k-1);
StartColChar := Char(Ord('A')+ (l mod 26));
end
else
begin
SS :='';
StartColChar := Char(Ord('A')+ l);
end;
//------------------------------------------------------------------------------
l := (ACol -1 + (ACellsNum - 1));
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SE := Char(Ord('A') + k-1);
EndColChar := Char(Ord('A')+ (l mod 26));
end
else
begin
SE :='';
EndColChar := Char(Ord('A')+ l);
end;
//------------------------------------------------------------------------------
SS := SS + StartColChar + IntToStr(ARow + i);
SE := SE + EndColChar + IntToStr(ARow + i);
end;
1: //纵向合并行 纵纵
begin
// StartColChar := Char(Ord('A')+(ACol-1));
// EndColChar := Char(Ord('A')+(ACol-1));
l := ACol-1;
k := l div 26;
if k > 0 then // 检查有没有超范围
begin
SS := Char(Ord('A') + k-1);
SE := Char(Ord('A') + k-1);
StartColChar := Char(Ord('A')+(l mod 26));
EndColChar := Char(Ord('A')+(l mod 26));
end
else
begin
SS := '';
SE := '';
StartColChar := Char(Ord('A')+l);
EndColChar := Char(Ord('A')+l);
end;
//------------------------------------------------------------------------------
SS := SS + StartColChar + IntToStr(ARow+ACellsNum*(i+1)-ACellsNum);
SE := SE + EndColChar + IntToStr(ARow+ACellsNum*(i+1)-1);
end;
end;
end;
end;
// 以上设置行列号
ExcelSheet.Range[SS, SE].MergeCells := True; // 执行合并单元格动作
Inc(i);
end;
except
on e:Exception do
DebugODS('[MergeCells] Error : ' + e.Message);
end;
end;

9553

被折叠的 条评论
为什么被折叠?



