Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Открыт ли файл Excel


Irisss ©   (2010-08-11 09:23:00) 

Здравствуйте,

Не могу найти нужного свойства. Требуется узнать открыт ли файл с указанным именем XlsFileName, и если открыт то активировать эту книгу Workbook

   ExcelApp := CreateOleObject('Excel.Application');
   ExcelApp.Visible := false;

   ExcelApp.Application.EnableEvents := false;

   if Self.SaveDialog.Execute(Self.ParentWindow)
   then begin
       XlsFileName := ChangeFileExt(Self.SaveDialog.Files[0], '.xls');

       if FileExists( XlsFileName )
       then Workbook := ExcelApp.WorkBooks.Open( XlsFileName )
       else begin
           Workbook := ExcelApp.WorkBooks.Add;
           Workbook.SaveAs(XlsFileName);
       end;

       FindSheet := False;
       SheetName := TDataFormat.getOnlyFileName(Self.FCaption);

       for I := 1 to Workbook.WorkSheets.Count
       do begin
           if ( Workbook.WorkSheets[ I ].Name = SheetName )
           then begin
               Sheet       := Workbook.WorkSheets[ I ];
               FindSheet   := True;
           end
           else Sheet      := Workbook.ActiveSheet;
       end;
end;


как можно пройти по открытым книгам или как-то еще решить эту задачку?


ixen   (2010-08-13 06:34:00) [1]

> [8] Dennis I. Komarov

да xlt... ошибся


12   (2010-08-12 17:49:00) [2]


> можно использовать хитрый способ... файл который нужно обновлять
> сохраняй в формате шаблона *.dot ... юзер будет открывть
> файл но сам шаблон останется не заблокированным и его можно
> будет спокойно обновлять.. только юзеру придется его переодически
> переоткрывать чтобы видеть все изменения...

интересно..мне тоже надо,
надо попробовать будет так


Dennis I. Komarov   (2010-08-12 17:43:00) [3]


> сохраняй в формате шаблона *.dot

xlt


ixen   (2010-08-12 13:49:00) [4]

можно использовать хитрый способ... файл который нужно обновлять сохраняй в формате шаблона *.dot ... юзер будет открывть файл но сам шаблон останется не заблокированным и его можно будет спокойно обновлять.. только юзеру придется его переодически переоткрывать чтобы видеть все изменения...


Anatoly Podgoretsky   (2010-08-11 21:33:00) [5]

> Irisss  (11.08.2010 14:25:03)  [3]

А ты попробуй открыть файл с одинаковым именем, Эксель это не позволяет даже
для канонических имен.


Andy BitOff   (2010-08-11 14:38:00) [6]

Если мне не изменяет память, то как-то уже обсуждали, поищи на delphimaster.net
Вроде там пришли к мнению, что надо попробовать переименовать и если ошибка, то открыт.


KilkennyCat   (2010-08-11 14:34:00) [7]

непомню, есть ли признаки открытого файла в системе, вроде бы, если и есть, то не у fat32 и ниже... поэтому, если не думать о чем-то на таком уровне, то варианты такие:
поиск открытых окон екселя и чтение их заголовков - там вроде есть имя файла
добавление макроса, который при открытии пишет че-нить в куда-нить.


Irisss   (2010-08-11 14:25:00) [8]

Опишу задачу:
Есть данные, которые нужно добавлять в xls-файл, если он существует, если нет - то при этом еще и создавать файл.
Все хорошо, но оказалась такая ситуация, когда нужно дописать в существующий файл, который уже открыт.
Показанный выше код открывает еще раз этот файл, а потом спрашивает, как сохранять. Кроме того, еще на панели висит куча одинаковых файлов, которые как минимум раздражают.
Помогите советом.

Спасибо


12   (2010-08-11 13:30:00) [9]

предположить, что он открыт и ловить исключение?


Irisss   (2010-08-11 12:07:00) [10]

       Workbook := -1;
       for iWorkBook := 1 to ExcelApp.WorkBooks.Count
       do begin
           if ( ExcelApp.WorkBooks.Item[iWorkBook].FullName = XlsFileName )
           then begin
               Workbook := ExcelApp.WorkBooks.Item[iWorkBook];
               Break;
           end;
       end;


Такой вариант почему-то не работает, даже не заходит в цикл


Наверх

Титульная страница Поиск, карта сайта Написать письмо