读书人

delphi话语实现导出excel表其中同一

发布时间: 2013-06-25 23:45:42 作者: rapoo

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;

读书人网 >.NET

热点推荐