Автор: Zanka 16:01:2008, 08:56
Пишу так, или не совсем так, не важно, но смысл такой:
Код
procedure TForm14.Button1Click(Sender: TObject);
var
StartString, EndString:Integer;
xlapp, xlbook, xlsht: OleVariant;
i,j: word;
ot_okpo:String;
begin
DataModule1.Table1.Open;
DataModule1.Table1.First;
xlapp:=CreateOleObject('Excel.Application');
xlapp.Visible:=false;
xlbook:=xlapp.WorkBooks.Open(ExtractFilePath(Application.exeName)+'Reports\Rep.xls');
xlsht:=xlbook.ActiveSheet;
xlapp.Range['B'+IntToStr(17),'K'+IntToStr(100)].delete(-4162);
i:=1; j:=1;
xlapp.DisplayAlerts := False;
while not DataModule1.table1.Eof do
begin
xlsht.Cells(i+3,j+1):=DataModule1.Table1.Fieldbyname('k_firm').AsString;
xlsht.Cells(i+3,j+2):=DataModule1.Table1.Fieldbyname('k_model').AsString;
xlsht.Cells(i+3,j+4):=DataModule1.Table1.Fieldbyname('data_pokupka').AsString;
DataModule1.Table1.Next;
inc(i);
end;
//если встречаются 2 одинаковых значения, то объединяем ячейки
здесь i=0, хотя должен=последней напечатанной строке(ячейке)
For i: = EndString DownTo StartString do begin
If xlsht.Cells(i, 2) = xlsht.Cells(i - 1, 2) Then begin
xlsht.Range['B'+IntToStr(i-1),'B'+IntToStr(i)].Merge;
xlsht.Range['C'+IntToStr(i-1),'C'+IntToStr(i)].Merge;
xlsht.Range['E'+IntToStr(i-1),'E'+IntToStr(i)].Merge;
End;
end;
здесь значение i принимается, т.е.=последней строке
xlsht.Range['B'+IntToStr(i+2),'E4'].Borders.Weight:=2;
xlapp.Visible:=true;
DataModule1.table1.Close;
end;
В общем это не работает
Автор: Morpheus 16:01:2008, 08:58
Наверное условие проверки одинаковости замеите на
xlsht.Cells(i, 2).Value = xlsht.Cells(i - 1, 2).Value
Автор: Zanka 16:01:2008, 09:21
Цитата(Morpheus @ 16:01:2008, 14:58 )

Наверное условие проверки одинаковости замеите на
xlsht.Cells(i, 2).Value = xlsht.Cells(i - 1, 2).Value
Для:
MorpheusСпасибо...,
но не помогло, уже на forе в i ничего не записывается
Автор: root 16:01:2008, 10:22
Для: Zanka
а если сначало выделить объединяемы
Код
Range("B1:B2").Select
а потом объединить
Код
Selection.MergeCells = True
получится что то на подобе
Код
xlsht.Range['A'+IntToStr(1),'A'+IntToStr(2)].select;
xlapp.Selection.MergeCells:= True;
Автор: Zanka 16:01:2008, 11:02
Для: root
Спасибо, но наверно проблема не в этом, до самого объединения даже не доходит,
вроде как такой член группы не найден, хотя он есть
Автор: root 16:01:2008, 11:18
Для: Zanka
попробуй через такой тип записи
Код
xlsht.cells.item[1,2]:='123';
незнаю на сколько я прав но помойму тип вариант сравнивать неправильно
Код
xlsht.Cells(i, 2) = xlsht.Cells(i - 1, 2)
попробуй через доп переменные
Автор: Zanka 16:01:2008, 12:20
Для: root
Огромное спасибо, у меня все получилось!!!)))