Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
16:01:2008, 08:56
|
|
Новенький ![]() Группа: Программист Сообщений: 12 Регистрация: 16:01:2008 Из: Россия, Новосибирск Пользователь №: 14 810 Специализация: Delphi,SQL Репутация: 0
|
Пишу так, или не совсем так, не важно, но смысл такой:
Код 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; В общем это не работает |
|
Сообщение
#1
|
|
![]() |
|
|
16:01:2008, 08:58
|
|
очень злой модератор ![]() ![]() ![]() ![]() ![]() Группа: Lotus team Сообщений: 2 667 Регистрация: 7:08:2006 Из: Украина, Киев Пользователь №: 5 807 Специализация: разработчик всякой хрени Репутация: 46
|
Наверное условие проверки одинаковости замеите на
xlsht.Cells(i, 2).Value = xlsht.Cells(i - 1, 2).Value |
|
Сообщение
#2
|
|
|
|
16:01:2008, 09:21
|
|
Новенький ![]() Группа: Программист Сообщений: 12 Регистрация: 16:01:2008 Из: Россия, Новосибирск Пользователь №: 14 810 Специализация: Delphi,SQL Репутация: 0
|
|
|
Сообщение
#3
|
|
|
|
16:01:2008, 10:22
|
|
Знающий ![]() ![]() ![]() Группа: Lotus team Сообщений: 492 Регистрация: 10:06:2006 Пользователь №: 4 745 Специализация: Lotus Notes & Domino, ERP Репутация: 18
|
Для: Zanka
а если сначало выделить объединяемы Код Range("B1:B2").Select а потом объединить Код Selection.MergeCells = True получится что то на подобе Код xlsht.Range['A'+IntToStr(1),'A'+IntToStr(2)].select;
xlapp.Selection.MergeCells:= True; Сообщение отредактировал root - 16:01:2008, 11:06 |
|
Сообщение
#4
|
|
|
|
16:01:2008, 11:02
|
|
Новенький ![]() Группа: Программист Сообщений: 12 Регистрация: 16:01:2008 Из: Россия, Новосибирск Пользователь №: 14 810 Специализация: Delphi,SQL Репутация: 0
|
Для: root
Спасибо, но наверно проблема не в этом, до самого объединения даже не доходит, вроде как такой член группы не найден, хотя он есть |
|
Сообщение
#5
|
|
|
|
16:01:2008, 11:18
|
|
Знающий ![]() ![]() ![]() Группа: Lotus team Сообщений: 492 Регистрация: 10:06:2006 Пользователь №: 4 745 Специализация: Lotus Notes & Domino, ERP Репутация: 18
|
Для: Zanka
попробуй через такой тип записи Код xlsht.cells.item[1,2]:='123'; незнаю на сколько я прав но помойму тип вариант сравнивать неправильно Код xlsht.Cells(i, 2) = xlsht.Cells(i - 1, 2) попробуй через доп переменные Сообщение отредактировал root - 16:01:2008, 11:39 |
|
Сообщение
#6
|
|
|
|
16:01:2008, 12:20
|
|
Новенький ![]() Группа: Программист Сообщений: 12 Регистрация: 16:01:2008 Из: Россия, Новосибирск Пользователь №: 14 810 Специализация: Delphi,SQL Репутация: 0
|
Для: root
Огромное спасибо, у меня все получилось!!!))) |
|
Сообщение
#7
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 07:57 |