Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Результаты опроса: поможите?
да 0 0%
нет 0 0%
подумаю 1 100.00%
наверно 0 0%
Голосовавшие: 1. Вы еще не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.10.2012, 20:21
modestss modestss вне форума
Прохожий
 
Регистрация: 04.10.2012
Сообщения: 1
Репутация: 10
Печаль Сортировка и форматирование ячеек Excel по условию в Delphi

Народ, ваша помощь нужна!
есть 1 столбец в экселе и 2, нужно все значения, которые употребляются в 1 столбце, выделить их во 2 столбце красным цветом.

Алгоритм:


код программы:
Код:
unit Unit1;

interface

uses
  Windows, ComObj, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  excel: variant;
  i,j,n,m:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:integer;
begin
//s:string;
s:=0;
i:=2;
j:=2;
n:=2;
m:=2;
        begin
        //while n>8000 do
        //for s := 1 to 8000 do
        repeat
           begin
           if Excel.Cells[i, j]=Excel.Cells[n, m] then
              begin
              Excel.Range[n,m].Interior.Color:=RGB(223, 123, 123);
              n:=6;
              i:=i+1;
              ShowMessage(inttostr(i)+'  '+inttostr(n)+'  '+inttostr(m)+'  '+inttostr(j));
              end else n:=n+1;
            ShowMessage(inttostr(i)+'  '+inttostr(n)+'  '+inttostr(m)+'  '+inttostr(j));
           end;
        until n>=8000;
        end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Excel.DisplayAlerts:=False;
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible:= True;
Excel.Workbooks.Open['C:\5.xls'];
end;

end.
Ответить с цитированием
  #2  
Старый 05.10.2012, 03:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если данных не очень много, то рекомендую сначала просто считать первый столбец в память, потом пройтись по 2му и то, что совпадает, закрасить.
Ответить с цитированием
  #3  
Старый 05.10.2012, 06:12
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от modestss
Народ, ваша помощь нужна!
есть 1 столбец в экселе и 2, нужно все значения, которые употребляются в 1 столбце, выделить их во 2 столбце красным цветом.
Пробуй так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Sheet, VA, v: Variant;
  RowCount, i, j: Integer;
begin
  Sheet := Excel.ActiveSheet;
  VA := Sheet.UsedRange.Value;
  RowCount := VarArrayHighBound(VA, 1);
  for i := 1 to RowCount do
  begin
    v := VA[i, 2];
    for j := 1 to RowCount do
    begin
      if VA[j, 1] = v then
      begin
        Sheet.Cells[i, 2].Interior.Color := clRed;
        Break;
      end;
    end;
  end;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter