1 / 1 / 0 Регистрация: 07.01.2017 Сообщений: 69 |
|
1 |
|
12.01.2017, 13:08. Показов 6333. Ответов 8
Помогите пожалуйста нужно проверить открыт ли конкретный excel файл и если да, то закрыть его.(delphi)
0 |
5501 / 4296 / 1379 Регистрация: 14.04.2014 Сообщений: 19,295 Записей в блоге: 19 |
|
12.01.2017, 14:16 |
2 |
эмм, он открыт в Excel, и надо прибить Excel ?
0 |
4884 / 2756 / 849 Регистрация: 04.10.2012 Сообщений: 10,054 |
|
12.01.2017, 16:17 |
3 |
Markontr, пригодится для Excel
0 |
Markontr 1 / 1 / 0 Регистрация: 07.01.2017 Сообщений: 69 |
||||
17.01.2017, 14:19 [ТС] |
4 |
|||
ребят, вот код, при запуске приложения все работает хорошо, но если одновременно с сохранением будет открыта таблица rabota2, то выдает ошибку, что файл доступен только для чтения и не записывается. Так вот как сделать так, чтобы при программа вначале смотрела открыт ли файл rabota2 и если да то либо сохраняла и закрывала его, либо работала с ним, короче нужно сделать так, чтоб не было ошибки.
0 |
droider 4884 / 2756 / 849 Регистрация: 04.10.2012 Сообщений: 10,054 |
||||
17.01.2017, 15:45 |
5 |
|||
как сделать так, чтобы при программа вначале смотрела открыт ли файл rabota2 я же Вам дал ссылку выше. Стоило посмотреть самому
Следует учитывать взаимосвязь процедур и функции в приведенной статье. Например, функция WorkBookIndex() — отдельная функция и приведена там же.
0 |
1 / 1 / 0 Регистрация: 07.01.2017 Сообщений: 69 |
|
17.01.2017, 15:46 [ТС] |
6 |
Благодарю
0 |
droider 4884 / 2756 / 849 Регистрация: 04.10.2012 Сообщений: 10,054 |
||||
17.01.2017, 15:49 |
7 |
|||
и закрывала его Из той же статьи
Все будет красиво оформлено. Главное — правильно применить!
0 |
1 / 1 / 0 Регистрация: 07.01.2017 Сообщений: 69 |
|
17.01.2017, 15:50 [ТС] |
8 |
Все все, спасибо большое. Принял!
0 |
droider |
17.01.2017, 15:53
|
Не по теме:
Принял Good
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
17.01.2017, 15:53 |
9 |
← →
}|{yk ©
(2005-02-28 17:11)
[0]
Собственно.
← →
}|{yk ©
(2005-02-28 17:18)
[1]
Можна например такGetPidFromProcessName("EXCEL.EXE") <> $FFFF
но это как-то неправильно…
← →
MU
(2005-02-28 17:21)
[2]
может,
function GetActiveOleObject(const ClassName: string): IDispatch;
← →
wild_arg ©
(2005-02-28 17:22)
[3]
if MessageDlg("А не открыт ли у Вас Excel?", mtConfirmation, [mbYes,mbNo],0)=mrYes
then
//открыт
else
//не открыт
сорьки, не удержался…
← →
pasha_golub ©
(2005-02-28 17:25)
[4]
wild_arg © (28.02.05 17:22) [3]
LOL
MU (28.02.05 17:21) [2]
ИМХО, не пойдет. Ибо откроет новое и скажет, шо есть..
← →
Ольга
(2005-02-28 17:27)
[5]
function GetActiveOleObject в отношении к EXCEL работает некорректно. Я и сама в этом убедилась, а потом нашла в книге «СОМ-технологии» подтверждение, авторы пишут «… по непонятным причинам»
← →
MU
(2005-02-28 17:28)
[6]
2 pasha_golub ©
подойдет
← →
ArchValentin ©
(2005-02-28 18:10)
[7]
не гони, всё можно намутить гораздо проще, перебираешь все окошки FindWindow
, и проверяешь если первые n букв в названии равны «MS Exel» то => он открыт иначе нихрена подобного.
← →
Ольга
(2005-02-28 18:25)
[8]
А если смотреть в корень: зачем вам знать открыт ли Excel? Может нужно просто корректно закрывать «свои» Excel-и, а то можно закрыть открытый пользователем Excel, не имеющий никакого отношения к вашему приложению.
← →
aus
(2005-02-28 18:30)
[9]
ArchValentin © (28.02.05 18:10) [7]
не гони, я ведь имею право свой хелловорлд назвать «MS Exel»
← →
Алхимик ©
(2005-02-28 18:40)
[10]
> [3] wild_arg © (28.02.05 17:22)
> if MessageDlg(«А не открыт ли у Вас Excel?», mtConfirmation,
> [mbYes,mbNo],0)=mrYes
> then
> //открыт
> else
> //не открыт
С точки зрения программиста, пользователь — это периферийное устройство,
вводящее набор символов в ответ на команду READ.
← →
GanibalLector ©
(2005-03-01 02:10)
[11]
Вариант№1(облегченный)
var Excels:Variant;
begin
try
try
Excels:=GetActiveOleObject("Excel.Application");
finally
//значит есть ;)
Excels:=Unassigned;
end;
except
MessageDlg("Нет его тут!",mterror,[MbOk],0);
end;
end;
← →
GanibalLector ©
(2005-03-01 02:16)
[12]
Вариант №2(с коннектом) var Excels:Variant;
n:integer;
begin
try
try
Excels:=GetActiveOleObject("Excel.Application");
Caption:="Найдено документов:"+ IntToStr(Excels.WorkBooks.Count);
for n:=1 to Excels.WorkBooks.Count do
begin
if AnsiSameText("E:Kharkov.xls",Excels.Workbooks[n].FullName) then
begin
// тут работаем
Excels.WorkBooks[1].WorkSheets[1].Name:="Привет из Харькова!";
//
end;
end;
finally
Excels:=Unassigned;
end;
except
MessageDlg("Excel не найден!",mterror,[MbOk],0);
end;
end;
← →
GanibalLector ©
(2005-03-01 02:22)
[13]
2 }|{yk ©
И еще,хотел поинтересоваться…
В статье http://www.delphimaster.ru/articles/frames/index.html Вы работаете с INI на мой взгяд не корректно.Ведь не всегда есть права на запись! Тут бы try … except не помешали .
З.Ы.Пардон,если что…
← →
ArchValentin ©
(2005-03-01 03:41)
[14]
> aus (28.02.05 18:30) [9]
…и сколько ты видел программ с заголовком «Microsoft Exel»? если не секрет. Вот мне только некая прога из какого-то Office»a попадалась :)))
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Как узнать, что файл Excel уже открыт?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
мне надо обрабатывать екселевские файлы, но только если он не открыт еще никем. ЗЫ. И как можно сделать, чтобы ексель не спрашивал при сохранении, куда и что сохранять, а просто сохранял, куда скажут (программно) и в каком формате? Сообщение отредактировано: Voice — 24.12.03, 12:32 |
QUE |
|
||
В FAQ …. И читать … читать …. |
Voice |
|
Там этого нету…… |
filh |
|
Full Member Рейтинг (т): 12 |
Voice, а как же Exсel понимает, что файл уже открыт? Может где то во временной директории создается файл??? Может на мысль натолкнет |
Guest |
|
так временных папок, куда он файлы сохраняет, может быть куча и все их проверить просто нереально, т.к. придется все просматривать и пересматривать…. Точнее не нереально, а не рационально. Слишком долго это все будет сканиться и проверяться |
Voice |
|
так временных папок, куда он файлы сохраняет, может быть куча и все их проверить просто нереально, т.к. придется все просматривать и пересматривать…. Точнее не нереально, а не рационально. Слишком долго это все будет сканиться и проверяться |
filh |
|
Full Member Рейтинг (т): 12 |
Нашел
FileOpen(‘e:1.xls’, fmShareExclusive);
При возвращении -1 файл открыт, все что >0 никто не использует. Сообщение отредактировано: filh — 29.12.03, 08:43 |
n0wheremany |
|
Чел, юзай череп (свой)! >>> Поищи окна (задачу) |
Voice |
|
Цитата filh @ 29.12.03, 08:39 Нашел
FileOpen(‘e:1.xls’, fmShareExclusive);
Я уже немного по-другому сделал Добавлено в 29.12.03, 13:29: Цитата filh @ 29.12.03, 08:39 Нашел
FileOpen(‘e:1.xls’, fmShareExclusive);
Я уже немного по-другому сделал n0wheremany |
filh |
|
Full Member Рейтинг (т): 12 |
Цитата n0wheremany от 29.12.03, 15:45 А если придется открывать файл по сети? Что тогда? |
Song |
|
Цитата filh, 30.12.03, 07:50 А что, от этого окна не появляется? |
n0wheremany |
|
Цитата n0wheremany Это ты зря память сканить не надо!
function tform1.listprocesses:string; VAR Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin result:=»; Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {Не показываем:} IF (Wnd <> Application.Handle) AND {-Собственное окно} IsWindowVisible(Wnd) AND {-Невидимые окна} (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна} (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков} THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); if result=» then result:=’ ‘+StrPas(buff) else result:=result+’#13#10’+’ ‘+StrPas(buff); END; Wnd := GetWindow(Wnd, gw_hWndNext); END; end; Вот адаптированная для тебя
function tform1.ExcelFileOpen(NameFile:string):boolean; {без расширения} VAR Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin result:=»; Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {Не показываем:} IF (Wnd <> Application.Handle) AND {-Собственное окно} IsWindowVisible(Wnd) AND {-Невидимые окна} (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна} (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков} THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); if StrPas(buff)=’Microsoft Excel — ‘+NameFile then result:=true; END; Wnd := GetWindow(Wnd, gw_hWndNext); END; end; Проверь и посмотри!! Добавлено в 30.12.03, 07:58:
function tform1.ExcelFileOpen(NameFile:string):boolean; {без расширения} VAR Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin result:=false; {<<<<<<<<<<<} Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {Не показываем:} IF (Wnd <> Application.Handle) AND {-Собственное окно} IsWindowVisible(Wnd) AND {-Невидимые окна} (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна} (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков} THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); if StrPas(buff)=’Microsoft Excel — ‘+NameFile then result:=true; END; Wnd := GetWindow(Wnd, gw_hWndNext); END; end; |
Петрович |
|
Цитата Song, 30.12.03, 09:12 Если файл лежит на компе \COMP1 и открыт на компе \COMP2, то на компе \COMP1 никаких окон не появляется. А еще, можно открыть файл через COM интерфейс, не порождая при этом окон. |
filh |
|
Full Member Рейтинг (т): 12 |
Song, Цитата Петрович от 30.12.03, 11:00 Об этом я и говорил. |
Song |
|
Правильно, а зачем окнам появляться на Comp2 если он открывается с Comp1! |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0437 ] [ 16 queries used ] [ Generated: 14.04.23, 03:34 GMT ]
I need to test if I can use Excel OLE from my program since it can be launched on PCs without Excel. Code samples on the net assume Excel is installed, but what if not?
XLApp := CreateOleObject('Excel.Application');
try
// Hide Excel
XLApp.Visible := False;
// Open the Workbook
XLApp.Workbooks.Open(aPath);
...snip...
finally
// Quit Excel
if not VarIsEmpty(XLApp) then
begin
XLApp.Quit;
XLAPP := Unassigned;
end;
end;
Would that be correct code to find if Excel is installed?
//Try to create Excel OLE
try
XLApp := CreateOleObject('Excel.Application');
except
ShowMessage('Error opening Excel');
Exit;
end;
asked Feb 22, 2013 at 5:45
1
You can use a code based on the Scalabium’s tip to check whether Excel is available. Or something like:
uses ComObj, ActiveX;
function IsObjectAvailable(const ClassName: string): Boolean;
var
ClassID: TCLSID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)),
ClassID));
end;
You can also check if Excel is running by using following code:
function IsObjectActive(const ClassName: string): Boolean;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
Result := False;
if Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)) then
Result := Succeeded(GetActiveObject(ClassID, nil, Unknown));
end;
And then in some procedure or event:
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsObjectAvailable('Excel.Application') then
ShowMessage('Excel is available');
if IsObjectActive('Excel.Application') then
ShowMessage('Excel is running');
end;
TLama
74.7k17 gold badges210 silver badges386 bronze badges
answered Feb 22, 2013 at 7:36
5
Наиболее читаемое
-
Программы написанные на Delphi
-
Использование Microsoft Transaction Server
-
Advantage Database Server
-
Проектирование баз данных: новые требования, новые подходы
-
Что такое сообщения Windows?
-
Доменная система имен
-
Сообщения Win32 [ WM ]
-
Диагностические сообщения компилятора Delphi
-
Свои настройки Proxy в программе с TWebBrowser
-
Работа с отчетами Rave Report в режиме RunTime
Главная » База знаний » ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE » Работа с приложениями MS Office » Работа с Excel из Дельфи
Falk0ner, вс, 06/07/2008 — 15:35.
- Работа с Excel из Дельфи
Данный пример ищет активный экземпляр Excel и делает его видимым
var
ExcelApp : Variant;
begin
try
// Ищем запущеный экземплят Excel, если он не найден, вызывается исключение
ExcelApp := GetActiveOleObject(‘Excel.Application’);
// Делаем его видимым
ExcelApp.Visible := true;
except
end;
Автор Кулюкин Олег
Взято с сайта http://www.delphikingdom.ru/
Отправить комментарий
- Адреса страниц и электронной почты автоматически преобразуются в ссылки.
- Для цитирования используйте тег [quote]
- Use <!—newpage—> to create page breaks.
- You can enable syntax highlighting of source code with the following tags:
<code>
,<blockcode>
. Beside the tag style «<foo>
» it is also possible to use «[foo]
«. - You can use BBCode tags in the text, URLs will automatically be converted to links.
Проверка
Антиспам проверка
Введите символы с изображения: *
Карта сайта
Базы данных
Delphi.Net
Графика и мультимедиа
Интернет, сети,протоколы
Работа с файловой системой
ActiveX
WinAPI
Алгоритмы
Kylix
Конвертация форматов
Визуальные компоненты
Создание отчётов
Delphi IDE
Разработка приложений
Основы Delphi
Похожие материалы
- Сохранение данных из ListView в *.xls
- Экспорт документов Excel
- Страницы Excel — компонент F1Book
- Работа с ячейкой листа Microsoft Excel
- Примеры работы с MS Excel
Быстрая навигация в FAQ
Заголовок:
Новые файлы
-
Демострация ООП на Дельфи
-
ForevalZ — компилятор формул с комплексными переменными
-
Foreval — компилятор математических выражений (формул)
-
Геометрическая задача
-
Использование перестановок и сочетаний
-
Active Screen Snap — Программа для снятия скриншотов
-
подробная инфа о железе компа
-
Подсчёт количества отрезков в окружности
-
Использование данных логического типа
-
Работа с массивами
подробнее