Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 554
1

Проверить, открыта ли книга Excel

18.01.2016, 18:43. Просмотров 1355. Ответов 3
Метки нет (Все метки)

Как проверить, открыта ли книга Excel?
Нужно иметь ввиду, что при этом книга (файл xls) может быть открыта, занята другой программой, висеть в процессах и быть невидимой.
Я нашёл один способ, но какой-то он большой
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
  h: THandle;
  e: DWORD;
begin
  h:=CreateFile(
    PChar('c:\Downloads\Книга1.xls'),
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    0,
    0
  );
  if h=INVALID_HANDLE_VALUE then
  begin
    e:=GetLastError;
    if e=ERROR_SHARING_VIOLATION then ShowMessage('<font color="Red">The process cannot access the file because it is being used by another process.</font>')
    else ShowMessage(SysErrorMessage(e));
  end else CloseHandle(h);
end;
Может можно как-то это сделать изящнее?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 18:43
Ответы с готовыми решениями:

Как проверить открыта или закрыта форма, открытая НЕ модально?
Здравствуйте. Есть две формы: Form1 (главная форма) и Form2 (открывается из первой НЕ модально)....

Как определить, что открыта панель Персонализации и завершить её, если она открыта?
Я понимаю, что необходимо узнать Hendle окна. Но как узнать хэндл Панель управления\Все элементы...

Как в Excel проверить, открыта ли книга?
Как через макросы проверить, открыта ли заданая книга в данный момент, и в каком режиме(read only...

VBA Access: как проверить, открыта ли данная книга Excel
Добрый день! Подскажите пожалуйста, как можно при помощи модуля VBA В Access проверить открыта ли...

Как проверить открыта ли книга если ей задана переменная (excel 2010)
При заданном условии (А, В, С) должна открыться определенная книга, задача проверить открыта ли она...

3
Glin
15 / 15 / 5
Регистрация: 26.05.2014
Сообщений: 122
19.01.2016, 08:14 2
Здравствуйте, вот ещё вариант, использую для выгрузки из базы в Excel
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var
  exApp, exBook, exCell, exRng, exComm : Variant;
 x, i, RowE, Col, Offs : Integer;
  Od : TOpenDialog;
  S : String;
 begin
//Проверка подключения к БД.
  if not ADOQuery1.Active then begin
    MessageBox(0, 'Таблица закрыта. Действие отменено.'
      ,'Отмена', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 //Проверка, выбрана ли запись.
  if ADOQuery1.Eof then begin
    MessageBox(0, 'Запись не выбрана. Действие отменено.'
      ,'Отмена', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
  //Проверка, есть ли подключение к MS Excel.
  if not VarIsClear(gExSh) then
  try
    S := gExSh.Name;
  except
    VarClear(gExSh);
  end; 
  //Если подключения к Excel нет, то запускаем диалог открытия раб. книги Excel.
  if VarIsClear(gExSh) then begin
    Od := OpenDialog1; //OpenDialog1 уже должен быть на форме.
    if Od.InitialDir = '' then
      Od.InitialDir := ExtractFilePath( ParamStr(0) );
    if not Od.Execute then Exit;
    if not FileExists(Od.FileName) then begin
      MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.'
        ,'Файл не найден', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
      Exit;
    end;
    //Попытка подключиться к корневому объекту MS Excel.
    try
      exApp := CreateOleObject('Excel.Application');
    except
      MessageBox(0, 'Не удалось запустить MS Excel. Действие отменено.',
        'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      Exit;
    end;
    //Делаем видимым окно MS Excel.
    exApp.Visible := True;
    //Открываем файл рабочей книги.
    exBook := exApp.WorkBooks.Open(FileName:=Od.FileName);
    //Получаем ссылку на ВТОРОЙ лист рабочей книги.
    if exBook.Worksheets.Count < 2 then begin
      MessageBox(0, 'В книге нет первого листа! Действие отменено.',
        'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      Exit;
    end;
    gExSh := exBook.Worksheets[1];
  end;
1
qwertehok
2906 / 2554 / 680
Регистрация: 29.08.2013
Сообщений: 17,294
19.01.2016, 08:54 3
Цитата Сообщение от Glin Посмотреть сообщение
if not VarIsClear(gExSh) then
* try
* * S := gExSh.Name;
* except
* * VarClear(gExSh);
* end;
а что это у вас такое?
0
Glin
15 / 15 / 5
Регистрация: 26.05.2014
Сообщений: 122
19.01.2016, 09:31 4
Цитата Сообщение от qwertehok Посмотреть сообщение
а что это у вас такое?
Проверяю открыт ли excel документ с определённым именем
0
19.01.2016, 09:31
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 09:31

Как мне узнать открыта данная книга Excel или нет?
Два раза открываю Excel, например, через 'StartProgramsMicrosoft Excel'. В каждом из них открываю...

Как в экселе узнать открыта ли определённая книга?
Подскажите как в экселе узнать открыта ли определённая книга? Private Sub kn1_Click() 'Если...

Проверить открыта ли форма
Мне нужно после нажатия одной кнопки проверить открыта ли форма и если да то закрыть если нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.