对EXCEL文件按指定位置、栏目、循环次数进行单元格合并操作

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;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值