Delphi+Excel

alexK19
Дата: 25.09.2019 09:31:11
Здравствуйте, при запуске Excel из приложения оно открывается на заднем плане. Подскажите как, если возможно, открывать документ на переднем плане.

Вариант - искать окно по его имени через API, как-то не очень...
Мимопроходящий
Дата: 25.09.2019 10:19:11

25.09.2019 9:31, alexK19 пишет:
> Здравствуйте, при запуске Excel из приложения оно открывается на заднем плане.

как запускаешь?
показывай

Posted via ActualForum NNTP Server 1.5

alexK19
Дата: 25.09.2019 10:42:06
Мимопроходящий
25.09.2019 9:31, alexK19 пишет:
> Здравствуйте, при запуске Excel из приложения оно открывается на заднем плане.

как запускаешь?
показывай



const
  ExcelApp = 'Excel.Application';

var
  Excel: OleVariant;

........



function TReportForm.CheckExcelInstall: boolean;
var
  ClassID: TCLSID;
begin
  Result := CLSIDFromProgID(PWideChar(WideString(ExcelApp)), ClassID) = S_OK;
end;

function TReportForm.RunExcel(DisableAlerts: boolean=true; Visible: boolean=false): boolean;
begin
  try
    if CheckExcelInstall then
      begin
        Excel := CreateOleObject(ExcelApp);
        Excel.Application.EnableEvents := DisableAlerts;
        //Excel.Visible := Visible;
        Result := true;
      end
    else
      begin
        MessageBox(0,'Excel íå óñòàíîâëåí','Îøèáêà',MB_OK+MB_ICONERROR);
        Result:=false;
      end;
  except
    Result := false;
  end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  WorkBook, Sheet: OleVariant;
begin
  RunExcel(True, True);
  WorkBook := Excel.Workbooks.Add;
  .......
  //Заполняю отчет
  ....... 
  Excel.Visible := Visible;
end;
istrebitel
Дата: 25.09.2019 11:06:14
procedure TMainForm.Button1Click(Sender: TObject);
var
  WorkBook, Sheet: OleVariant;
begin
  RunExcel(True, True);
  WorkBook := Excel.Workbooks.Add;
  .......
  //Заполняю отчет
  ....... 
  Excel.Visible := Visible;
  SetForegroundWindow(Excel.Hwnd);
end;
istrebitel
Дата: 25.09.2019 11:10:18
И вообще для максимального ускорения выгрузок

class function TExcelExporter.CreateExcelOleObject :OleVariant;
begin
  Result := CreateOleObject('Excel.Application');
  Result.Visible := False;
  Result.EnableEvents := False;
  Result.ScreenUpdating := False;
  Result.WorkBooks.Add;
  Result.Calculation := xlCalculationManual;
  Result.DisplayAlerts := False;
end;

class procedure TExcelExporter.ShowExcelOleObject(xls :OleVariant);
begin
  xls.ScreenUpdating := True;
  xls.EnableEvents := True;
  xls.Calculation := xlCalculationAutomatic;
  xls.DisplayAlerts := True;
  //xls.ReferenceStyle := xlA1;
  xls.Visible:=True;
  SetForegroundWindow(xls.Hwnd);
end;
alexK19
Дата: 25.09.2019 11:16:42
>>SetForegroundWindow(Excel.Hwnd);

Спасибо.
yemets63
Дата: 27.09.2019 11:35:52
alexK19,

не скупитесь, купите компонент Spreadsheet раньше в комплекте DevExpress был сейчас есть и отдельно.

или качните, и вас ни кто не осудит ActiveX, работает от 98 по Windows 10, завоут его F1Book, если не заниматься супер построением графиков в Excel то думаю будет достаточно, просто и быстро.

потому что все эти сервера автоматизации от Microsoft ну не то это