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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 02:15   #1
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию работа из Delphi с двумя Excel

имеется следующий код проверки если запущен процесс EXCEL.EXE
если нет запускается

Код:
function RunExcel: boolean;
begin
if GetProcessByEXE('EXCEL.EXE')<>0 then
begin
Result:=true;
xls1:= GetActiveOleObject('Excel.Application');
xls2:= GetActiveOleObject('Excel.Application');
end
else
begin
Result:=false;
xls1:= CreateOleObject('Excel.Application');
xls2:= CreateOleObject('Excel.Application');
end;
end;

если убить процесс эксэль и запустить программу она работает правильно (но запускаються два процеса EXCEL.EXE) ну а вот если эксэль запушен или повторно вызвать функцию ранэксэль то она работает уже неправильно (данные которые должны браться из разных документов берутся из одного и того же файла)

есть и остальная часть программы но я думаю что загвоздка именно здесь.
Код:
xls1:= GetActiveOleObject('Excel.Application');
xls2:= GetActiveOleObject('Excel.Application');
помогите решить проблему

Последний раз редактировалось Giku; 05.12.2011 в 02:16. Причина: забыл написать суть проблемы
Giku вне форума Ответить с цитированием
Старый 05.12.2011, 18:53   #2
alex_sed
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 11
По умолчанию

Вопрос: А зачем запускать два процесса Excel, когда можно в одном отрыть оба файла и с ними работать?
alex_sed вне форума Ответить с цитированием
Старый 05.12.2011, 21:40   #3
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

Цитата:
Сообщение от alex_sed Посмотреть сообщение
Вопрос: А зачем запускать два процесса Excel, когда можно в одном отрыть оба файла и с ними работать?
подскажи пожалуйста как
а то если я запускаю только один процесс то работает только один документ
видимо я что то делаю неправельно
Giku вне форума Ответить с цитированием
Старый 05.12.2011, 23:49   #4
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

вот весь код

Код:
var
  Form1: TForm1;
  Excel1,  Excel2: OleVariant;
  xls1, xls2: OleVariant;


implementation
{$R *.dfm}



function GetProcessByEXE(exename: string): THandle;
var
  hSnapshoot: THandle;
  pe32: TProcessEntry32;
begin
  Result:= 0;
  hSnapshoot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapshoot = 0) then Exit;
  pe32.dwSize:= SizeOf(TProcessEntry32);
  if (Process32First(hSnapshoot, pe32)) then
    repeat
      if (pe32.szExeFile = exename) then
      begin
        Result:= pe32.th32ProcessID;
        exit;
      end;
    until not Process32Next(hSnapshoot, pe32);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
      Label1.Caption:=OpenDialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if OpenDialog2.Execute then
      Label2.Caption:=OpenDialog2.FileName;
end;

function ExistExcel: boolean;
var
ID: TCLSID;
Res: HRESULT;
begin
Res:=CLSIDFromProgID('Excel.Application',ID);
if Res=0 then
Result:=true
else
Result:=false;
end;

function RunExcel: boolean;
begin
if GetProcessByEXE('EXCEL.EXE')<>0 then
begin
Result:=true;
xls1:= GetActiveOleObject('Excel.Application');
xls2:= GetActiveOleObject('Excel.Application');
end
else
begin
Result:=false;
xls1:= CreateOleObject('Excel.Application');
xls2:= CreateOleObject('Excel.Application');
end;
end;


procedure TForm1.Button3Click(Sender: TObject);
var
x1, x2: integer;
begin
if ExistExcel=false then
begin
Showmessage('Установите EXCEL');
end
else
begin
RunExcel;

Excel2:=xls2.Workbooks.Open[Label2.Caption];
Excel1:=xls1.Workbooks.Open[Label1.Caption];
xls1.Visible := False;
xls2.Visible := False;
x2:=xls2.Range['A1'];
x1:=xls1.Range['B1'];

if x1=x2 then
begin
label6.Caption:='A1';
label8.Caption:=inttostr(x1);
label9.Caption:=inttostr(x2);
end
else
begin
label6.Caption:='A2';
label8.Caption:=inttostr(x2);
label9.Caption:=inttostr(x1);
end;
end;
end;
end.

Последний раз редактировалось Giku; 06.12.2011 в 00:02.
Giku вне форума Ответить с цитированием
Старый 06.12.2011, 18:51   #5
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

ну что кто то подскажет как правильно открыть два документа Excel и работать с ними одновременно не запуская лишних процессов ???
Giku вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Excel из Delphi Ky3Heu, Общие вопросы Delphi 2 12.10.2011 11:53
Delphi 7 работа с Excel Alkifr Помощь студентам 0 30.10.2010 00:31
Delphi 7 работа с Excel Alkifr Помощь студентам 0 29.10.2010 21:31
Работа Delphi с рисунком в Excel? Alex-as-hac Общие вопросы Delphi 0 02.12.2008 09:59