Форум: "Основная";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Внизоткрыт ли уже *.xls файл Найти похожие ветки
← →
knastya (2006-11-09 02:09) [0]Подскажите, пожалуйста.
Стоит задача записать данные из Дельфи в экселевскую таблицу. Если вдруг таблица уже открыта в самом экселе на момент записи, данные не будут сохранены в ней. Соответсвенно, перед тем, как записывать в таблицу, хотелось бы узнать, не открыта ли она уже.
Делаю:
ExcelApp := CreateOleObject("Excel.Application");
b:=false;
i:=1;
n:=ExcelApp.Application.WorkBooks.count;
while (not b) and (i<=n) do
begin
b:=(ExcelApp.Application.WorkBooks[i].Fullname= fileName);
inc(i);
end;
Так вот, n=0, если эксель запущен и в нем открыты таблицы.
А как мне тогда увидеть, что файл открыт?
← →
ЮЮ © (2006-11-09 07:30) [1]вместо inc(i); следует if not b then inc(i);
Не стоит терять с таким трудом найденный индекс
if b then
oткрыт ExcelApp.Application.WorkBooks[i]
на n можно и не смотреть
← →
MetalFan © (2006-11-09 08:19) [2]сначала
GetActiveOleObject("Excel.Application")
если что-то вернуло - то это запущенный экземпляр excel... возможно с открытыми файлами
← →
umbra © (2006-11-09 13:08) [3]лучше записать данные в новую книгу, закрыть ее, попытаться удалить файл со старыми данными. Если он открыт, то удалить его не удастся. Если закрыт, то он удалится и можно переименовывать новый файл. Что-то наподобие
if FileExists(oldfile) then
repeat until DeleteFile(oldfile);
RenameFile(oldfile, newfile);
Пользоваться приведенным кодом не стоит, это только иллюстрация.
← →
umbra © (2006-11-09 13:17) [4]прошу прощения, конечно же
RenameFile(newfile, oldfile);
← →
knastya (2006-11-09 22:22) [5]to [2]
Спасибо, заработало.
Правда не понимаю, как теперь отсоединится от excel, чтобы его при этом не закрыть (ну ведь с ним кто-то предположительно работает).
ExcelApp.Application.Quit; <----вот здесь закрывается
ExcelApp:=unassigned;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.05 c