Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2016, 06:33   #1
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию Вывод ответа на отдельную форму.

В общем есть программа всё работает. Смысл загружает таблицу Excel но загружает долго. Обычному пользователю не очень понятно когда завершилась загрузка,нужно сделать ,чтобы было написано что загрузка завершена. Потом при нажатии на кнопку фильтр выводит ответы выводится в неудобном консольном окне. И всё сполшником можно как нибудь облагородить. Вот код
Код:
unit class_fMain;

interface

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



type
  TfMain = class(TForm)
    sgExcel: TStringGrid;
    btnOpenFile: TButton;
    OpenDlg: TOpenDialog;
    btnFind: TButton;
    Label1: TLabel;
    procedure btnOpenFileClick(Sender: TObject);
    procedure btnFindClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fMain: TfMain;

implementation

{$R *.dfm}

procedure Xls_Open(XLSFile:string; Grid: TStringGrid);
//Ñ÷èòûâàåò Excel â StringGrid.
const
  xlCellTypeLastCell = $0000000B;
var
  ExlApp, Sheet: OLEVariant;
  i, j, r, c: Integer;
begin
  ExlApp := CreateOleObject('Excel.Application');
  try
    ExlApp.Visible := false;
    ExlApp.Workbooks.Open(XLSFile);
    Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    r := ExlApp.ActiveCell.Row;
    c := ExlApp.ActiveCell.Column;
    Grid.RowCount:=r;
    Grid.ColCount:=c;
     for j:= 1 to r do
       for i:= 1 to c do
         Grid.Cells[i-1,j-1]:= sheet.cells[j,i];
  finally
    ExlApp.Quit;
    ExlApp := Unassigned;
    Sheet := Unassigned;
  end;
end;


procedure AutoSizeGridColumn(Grid : TStringGrid; Column : Integer);
//Àâòîðàçìåð êîëîíîê StringGrid ïîä øèðèíó òåêñòà.
var
  I : Integer;
  Temp : Integer;
  Max : Integer;
begin
  Max := 0;
  for i := 0 to (Grid.RowCount - 1) do
  begin
    Temp := Grid.Canvas.TextWidth(Grid.Cells[Column, I]);
    if Temp > Max
      then Max := Temp;
  end;
  Grid.ColWidths[Column] := Max + Grid.GridLineWidth + 10;
end;


procedure TfMain.btnOpenFileClick(Sender: TObject);
var
  X: Integer;
begin
  OpenDlg.InitialDir:=ExtractFilePath(ParamStr(0));
  if OpenDlg.Execute then
    begin
      Xls_Open(OpenDlg.Files[0], sgExcel);
      for x := 0 to sgExcel.ColCount-1 do
        AutoSizeGridColumn(sgExcel, x);
    end;
end;

procedure TfMain.btnFindClick(Sender: TObject);
type
  Rec = record
    sgLine: Integer;
    cData: String;
    sData: String;
    fCount: Integer;
end;

var
  x: Integer;
  cache: array of Rec;

procedure FillData(Col1, Col2: String; Addr: Integer);
var
  I: Integer;
  Found: Boolean;
begin
  Found:=False;
  for I := Low(cache) to High(Cache) do
    begin
      if
        (Cache[i].cData = trim(lowercase(Col1))) and
        (Cache[i].sData = trim(lowercase(Col2)))
      then
        begin
          Inc(Cache[i].fCount);
          Found:=True;
          Break;
        end;
    end;
  if not Found then
    begin
      SetLength(Cache, Length(Cache)+1);
      Cache[Length(Cache)-1].cData:=Trim(Lowercase(Col1));
      Cache[Length(Cache)-1].sData:=Trim(Lowercase(Col2));
      Cache[Length(Cache)-1].fCount:=1;
      Cache[Length(Cache)-1].sgLine:=Addr;
    end;
end;

begin
  //Îòôèëüòðóåì íóæíûå çíà÷åíèÿ ïî  ïî 3 è 7-é êîëîíêå îäíîâðåìåííî.
  for x := 1 to sgExcel.RowCount-1 do FillData(sgExcel.Cells[3,x], sgExcel.Cells[7,x], x);
  //Ïîêàæåì ãäå ó íàñ íóæíûå çíà÷åíèÿ.
  for x := Low(cache) to High(cache) do
    if cache[x].fCount > 1
      then MessageBox
        (
          Handle,
          pChar(Format('Çíà÷åíèÿ: [%d], %s, êîëè÷åñòâî: %d',
            [
              cache[x].sgLine,
              cache[x].cData + ' ' +  cache[x].sData,
              cache[x].fCount
            ])),
          pChar(fMain.Caption),
          MB_ICONINFORMATION or MB_OK
        );
end;



end.
Изображения
Тип файла: jpg Безымянный18.jpg (101.0 Кб, 121 просмотров)

Последний раз редактировалось Kostya12; 21.10.2016 в 08:12. Причина: Забыл добавить самое главное код))
Kostya12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать форму и её дочернюю форму и организовать вывод Делфи программирование Помощь студентам 0 21.09.2013 20:18
Вывод в отдельную ячейку первого несоответствия между двумя массивами Доктор Microsoft Office Excel 6 22.07.2013 13:56
Поиск данных и вывод отдельную ячейку ReVer273 Microsoft Office Excel 13 21.01.2013 20:55
Вывод на отдельную страницу 7hp PHP 0 21.09.2011 17:09
при закрытии потока(Tthread) посылать на форму код ответа или сообщение Человек_Борща Общие вопросы Delphi 2 14.12.2010 21:19