как объединить ячейки с условием

Тема в разделе "Delphi - СОМ", создана пользователем Zanka, 16 янв 2008.

  1. Zanka

    Zanka Гость

    Пишу так, или не совсем так, не важно, но смысл такой:

    Код (Text):
    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;
    В общем это не работает :)
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Наверное условие проверки одинаковости замеите на

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

    Zanka Гость



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

    root Гость

    Для: Zanka
    а если сначало выделить объединяемы
    Код (Text):
    Range("B1:B2").Select
    а потом объединить
    Код (Text):
    Selection.MergeCells = True
    получится что то на подобе
    Код (Text):
     xlsht.Range['A'+IntToStr(1),'A'+IntToStr(2)].select;
    xlapp.Selection.MergeCells:= True;
     
  5. Zanka

    Zanka Гость

    Для: root
    Спасибо, но наверно проблема не в этом, до самого объединения даже не доходит,
    вроде как такой член группы не найден, хотя он есть
     
  6. root

    root Гость

    Для: Zanka
    попробуй через такой тип записи
    Код (Text):
    xlsht.cells.item[1,2]:='123';
    незнаю на сколько я прав но помойму тип вариант сравнивать неправильно
    Код (Text):
    xlsht.Cells(i, 2) = xlsht.Cells(i - 1, 2)
    попробуй через доп переменные
     
  7. Zanka

    Zanka Гость

    Для: root
    Огромное спасибо, у меня все получилось!!!)))
     
Загрузка...

Поделиться этой страницей