Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> как объединить ячейки с условием, как объединить ячейки Excel с условием
Zanka
Вставить ник
сообщение 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;


В общем это не работает unsure.gif
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 6)
Morpheus
Вставить ник
сообщение 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
Zanka
Вставить ник
сообщение 16:01:2008, 09:21
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 12
Регистрация: 16:01:2008
Из: Россия, Новосибирск
Пользователь №: 14 810
Специализация: Delphi,SQL



Репутация: - 0 +


Цитата(Morpheus @ 16:01:2008, 14:58 ) *
Наверное условие проверки одинаковости замеите на

xlsht.Cells(i, 2).Value = xlsht.Cells(i - 1, 2).Value




Для: Morpheus
Спасибо...,
но не помогло, уже на forе в i ничего не записывается unsure.gif

Сообщение отредактировал Zanka - 16:01:2008, 09:18
Подняться вверх 
 
Сообщение #3
root
Вставить ник
сообщение 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
Zanka
Вставить ник
сообщение 16:01:2008, 11:02
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 12
Регистрация: 16:01:2008
Из: Россия, Новосибирск
Пользователь №: 14 810
Специализация: Delphi,SQL



Репутация: - 0 +


Для: root
Спасибо, но наверно проблема не в этом, до самого объединения даже не доходит,
вроде как такой член группы не найден, хотя он есть
Подняться вверх 
 
Сообщение #5
root
Вставить ник
сообщение 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
Zanka
Вставить ник
сообщение 16:01:2008, 12:20
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 12
Регистрация: 16:01:2008
Из: Россия, Новосибирск
Пользователь №: 14 810
Специализация: Delphi,SQL



Репутация: - 0 +


Для: root
Огромное спасибо, у меня все получилось!!!)))
Подняться вверх 
 
Сообщение #7


Ответить  Новая тема 

 

RSS Текстовая версия Сейчас: 17:05:2008 - 07:57
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net