首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi话语实现导出excel表,其中同一列中相同单元格自动合并

2013-06-25 
delphi语句实现导出excel表,其中同一列中相同单元格自动合并找了一个excel的VBA程序,可以用。但这个转成del

delphi语句实现导出excel表,其中同一列中相同单元格自动合并

找了一个excel的VBA程序,可以用。但这个转成delphi怎么转呀??不知道怎么写,请教下,谢谢了

Sub MergeSameCells()
     Dim lRow As Integer
     Application.DisplayAlerts = False
     With ActiveSheet
         lRow = .Range("A65536").End(xlUp).Row
         For i = lRow To 2 Step -1
             If .Cells(i, 1).Value = .Cells(i - 1, 1).Value Then
                 .Range(.Cells(i - 1, 1), .Cells(i, 1)).Merge
             End If
         Next
     End With
     Application.DisplayAlerts = True
End Sub Excel Delphi
[解决办法]
我觉得你的合并代码  至少从表面来看就是清空,我在4楼有代码
你现在要做的就是比较第一列 每一行第一列与下面比较,如果有相同就清空,当然用说的合并也行
递归每一行,i为行


if excel.ActiveSheet.Cells[i,1].value=excel.ActiveSheet.Cell[i+1,1].value then        excel.ActiveSheet.Cells[i,1].ClearContents; 

[解决办法]

procedure TForm5.Button14Click(Sender: TObject);
var
  i, j, iStart: integer;
  excelapp: variant;
  sLastDept: string;
begin
  excelapp := createoleobject('excel.application');
  excelapp.visible := true;
  excelapp.caption := '单位通讯录';
  excelapp.workbooks.add;
  excelapp.worksheets[1].activate;
  excelapp.range['A1:S1'].merge;
  excelapp.cells[1, 1].value := '单位通讯录';

  with teladoquery1 do
  begin
    close;
    sql.Clear;
    sql.Add('select deptreetab.cname,jbxxtab.zgname,jbxxtab.tel from (jbxxtab inner join deptreetab on  jbxxtab.bm=deptreetab.cname )  where deptreetab.fatherid=1    ');
    open;
  end;

  j := 5;
  iStart := 5;
  sLastDept := '';
  with teladoquery1 do
  begin
    first;
    while True do
    begin
      //fields[0]为你的部门字段
      //如果是最后一笔数据或者当前的部门不等于上一个部门
      if Eof or (sLastDept <> fields[0].AsString) then
      begin


        sLastDept := fields[0].AsString;
        if (j - iStart > 1) then//如果上面的超过两行相同的部门则合并
          excelapp.Range[excelapp.Cells[iStart, 1], excelapp.Cells[j-1, 1]].Merge;
      end;

      if Eof then
        Break;

      for i := 1 to fieldcount do
      begin
        excelapp.worksheets[1].cells.item[j, i] := fields[i - 1].AsString;
      end;
      inc(j);
      next;
    end;
  end;
end;

热点排行