![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
имеется следующий код проверки если запущен процесс EXCEL.EXE
если нет запускается Код: Код:
function RunExcel: boolean;
begin
//если запущен процесс Excel
if GetProcessByEXE('EXCEL.EXE')<>0 then
begin
Result:=true;
// тут видимо и есть ошибка так как при обрашение к файлам
// данные берутся только из одного файла
xls1:= GetActiveOleObject('Excel.Application');
xls2:= GetActiveOleObject('Excel.Application');
end
else
//если не запущен
begin
Result:=false;
//создаются два процесса Excel, программа работает правильно,
//но хотелось бы не грузить систему и открыть файлы в одном процессе
xls1:= CreateOleObject('Excel.Application');
xls2:= CreateOleObject('Excel.Application');
end;
end;если убить процесс эксэль и запустить программу она работает правильно (но запускаються два процеса EXCEL.EXE) ну а вот если эксэль запущен или повторно вызвать функцию ранэксэль то она работает уже неправильно (данные которые должны браться из разных документов берутся из одного и того же файла) есть и остальная часть программы. помогите решить проблему |
|
#2
|
||||
|
||||
|
Цитата:
Код:
xls1:= GetActiveOleObject('Excel.Application');
xls1.Workbooks.Add;
xls1.Workbooks.Add;
xls1.Visible:= true;Потом просто к ним обращайся по индексам xls1.Workbooks[1]... и т.д. |
|
#3
|
|||
|
|||
|
это если создать.
а если открыть? |
|
#4
|
||||
|
||||
|
Вместо Add Open и в скобках что открыть нужно.
|
|
#5
|
|||
|
|||
|
Код:
procedure TForm1.ButtonClick(Sender: TObject);
begin
xls1:= GetActiveOleObject('Excel.Application');
xls1.Workbooks.Open[Label1.Caption];
xls1.Workbooks.Open[Label2.Caption];
xls1.Visible:= true;
//до этого момента все прекрасно а вот со следующей строчкой не знаю как
Label3.Caption:=xls1.Workbooks[1].Range['A1'];
end;пробовал и Код:
Label3.Caption:=xls1[1].Range['A1']; Код:
Label3.Caption:=xls1.Range['A1']; объясните пожалуйста подробней что вы имели введу Цитата:
|
|
#6
|
||||
|
||||
|
Прошу прощения, не метод Workbooks, а метод Windows:
Код:
//Поместим в лэйбл3 текст из А1 первой книги, а в лэйбл4 из второй xls1.Windows[1].Activate; Label3.Caption:= xls1.Range['A1'].Value; //небольшой комментарий: Value не обязательно указывать, это просто у меня привычка после VBA xls1.Windows[2].Activate; //на мой взгляд, более правильно обращаться к ячейкам не range, а cells: xls1.Cells[1,1].Value (A1) Label4.Caption:= xls1.Range['A1'].Value; //где первый индекс - индекс строки, а второй - индекс столбца, т.е. xls1.Cells[4,2] - B4 Код:
xls1.Windows[Label1.Caption].Activate; Последний раз редактировалось Ildar-tsr, 12.12.2011 в 12:28. |