Доброго времени суток!!!
Задача оч проста, но проблема оч велика: как подключится к уже запущенному excel'ю БЕЗ СОЗДАНИЯ НОВОГО ПРОЦЕССА (есть - excel-процесс подключился и работает с активной книгой и листом, нету - ну и не больно то и хотелось). Есть похожий код, но он цепляет определенную открытую книгу, т.е. приложение работает, стоишь в определенной ячейке на кнопку нажимаешь показывается адрес текущей ячейки все гут, но открываешь еще один excel, и всплывает окно редактирование personals.xls запрещено, и дальнейшее нажатие на кнопку приводит к показу адреса ячейки, ранее открытого и не активного файла:
procedure TForm1.Button1Click(Sender: TObject);
const
lcid = LOCALE_USER_DEFAULT;
var XL: TExcelApplication;
ASheet: TExcelWorksheet;
i: Integer;
begin
begin
XL := TExcelApplication.Create(nil);
XL.ConnectKind := ckRunningOrNew;
ASheet := TExcelWorksheet.Create(Self);
try
XL.Connect; // подключение
// XL.AutoQuit := False; // по умолчанию это свойство True только в unit ExcelXP
// XL.Visible[lcid] := True;
if XL.Workbooks.Count = 0 then begin
// Excel не запущен или не открыта ни одна книга
Exit;
end;
// ASheet.ConnectTo(xl.ActiveWorkbook.Application as _Worksheet);
ASheet.ConnectTo(XL.ActiveSheet as _Worksheet);
try
with XL.Selection[lcid] as ExcelRange do
// for i := 1 to Areas.Count do // мультиселект
// with Areas[i] do
ShowMessageFmt('R%dC%d:R%dC%d',
[Row, Column, Row + Rows.Count - 1, Column + Columns.Count - 1]);
except
// Selection - это не Range!
end;
// здесь работаем с Excel'ем
finally
XL.UserControl := True;
XL.Disconnect;
FreeAndNil(XL);
end;
end;
end;
Как его подрехтовать, чтобы выбрал ячейку, нажал на кнопку (один раз) и он показал адрес текущей ячейки активной открытой книги, не зависимо когда она была открыта до запуска приложения или после?
Заранее большое человеческое спасибо