Microsoft Excel reporting and 
 data analyzing with practically no coding. 
 .Net, ActiveX, and VCL versions. 
 www.AfalinaSoft.com

Главная    Продукты    Downloads    Поддержка    Регистрация    Delphi & Excel

[ English ]

MS Office COM Add-ins. Excel reports with minimal coding. Save your time. Get impressive results. VCL & OCX. Microsoft Excel reporting 
 and data analyzing

Delphi & Excel


Продукты



Delphi & Microsoft Excel - Excel.Application

LCID

В модуле Excel8 _TLB (Excel97 для Delphi5) во многих свойствах и методах вы можете встретить параметр или индекс lcid. Теоретически, в MSDN написано: "Indicates that the parameter is a locale ID (LCID)". Одни (Чарльз Калверт) предлагают в качестве его использовать 0, как идентификатор языка по умолчанию, другие - результат функции GetUserDefaultLCID. В некоторых случаях, чаще в связке Windows 2000 + Excel 2000, оба решения не проходят. Причем, выдается сообщение о попытке "использовать библиотеку старого формата..." Поэтому, рекомендуем в качестве lcid использовать значение константы LOCALE_USER_DEFAULT.

Например, вот так:

const xlLCID := LOCALE_USER_DEFAULT;


Отображение Excel


Используя раннее связывание

Многие считают, что IExcel.Visible[xlLCID] := true будет достаточно, однако правильнее делать так:

if Assigned(IExcel) then begin // а если он не создан?
IExcel.Visible[xlLCID] := true;
if IExcel.WindowState[xlLCID] = TOLEEnum(Excel8_TLB.xlMinimized) then
IExcel.WindowState[xlLCID] := TOLEEnum(Excel8_TLB.xlNormal);
IExcel.ScreenUpdating[xlLCID] := true;
end;

Зачем такие сложности:

  • xlMinimized:
    Попытайтесь отобразить уже запущенный, а затем минимизированный Excel простым Visible[xlLCID] := true и вы все поймете - Visible[xlLCID] := true просто переводит фокус в Excel, но не восстанавливает размеры его окна.
  • ScreenUpdating:
    Данное свойство отвечает за перерисовку окон Microsoft Excel. Попробуйте отобразить Excel (Visible[xlLCID] := true), выполняющийся в "скрытом" режиме - основное окно Excel показывается, однако клиентская область остается по-прежнему скрытой.

Используя позднее связывание

if not VarIsEmpty(Excel) then begin // а если он не создан?
Excel.Visible := true;
if Excel.WindowState = TOLEEnum(Excel8_TLB.xlMinimized) then
Excel.WindowState := TOLEEnum(Excel8_TLB.xlNormal);
Excel.ScreenUpdating := true;
end;


Скрытие Excel

Если вы хотите убрать процесс Excel из Панели задач, но оставить его в памяти, чтобы не тратить время на повторную загрузку, это можно сделать вот так:

Используя раннее связывание

if Assigned(IExcel) then begin
IExcel.Visible[xlLCID] := false;
end;

Используя позднее связывание

if not VarIsEmpty(Excel) then begin
Excel.Visible := false;
end;

Copyright © 1999-2003
Afalina Co., Ltd.
Все права защищены.

WebMaster