|
|
|
Пожалуйста, выделяйте текст программы тегом [с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,0584 ] [ 16 queries used ] [ Generated: 13.04.23, 22:37 GMT ]
1 / 1 / 0 Регистрация: 07.01.2017 Сообщений: 69 |
|
1 |
|
12.01.2017, 13:08. Показов 6211. Ответов 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 |
Содержание
- Работа с Excel в Delphi. Основы основ.
- Введение
- 1. Как проверить установлен ли Excel на компьютере пользователя?
- Delphi. Записки на полях.
- Основы работы с Excel в Delphi.
- 1. Как проверить установлен ли Excel на компьютере пользователя?
- 2. Как определить запущен ли Excel?
- 3. Как запустить Excel?
- 4. Создаем пустую рабочую книгу Excel
- 5. Сохраняем рабочую книгу и закрываем Excel
- Работа с Excel из Delphi. Часть 1
Работа с Excel в Delphi. Основы основ.
Видимо любители экономить килобайты оперативной памяти могут меня закидать помидорами или ещё чем по-хуже, но все-таки я скажу, что интеграция приложений (мегабайты оперативы) — это большой плюс нынешней разработки приложений.
Как ни крути, а время DOS и килобайтов оперативной памяти прошло. Вряд ли кто-то всерьез сейчас задумывается над тем куда это с винчестера пропал мегабайт? Да и использование в своих приложениях функциональности программ, которых ты не писал, но которые выполняют что-то лучше — это всё-таки больший прогресс, нежели корпеть год-два над программой, а потом узнать, что время-то прошло.
Введение
Итак, цель сегодняшней статьи — поделиться с Вами опытом работы с Microsoft Excel в приложениях, написанных на Delphi.
Вспомнился сейчас один случай. Когда я только начинал работать по своей специальности, пригласили меня написать программу-расчётник для экологов нашего нефтезавода. В принципе ничего серьёзного — программа считает выброс от нагревательной печи и выдает табличку результатов, которую необходимо распечатать и уложить в толстую папку с отчётами. Естественно, что в области разработки подобных приложения я далеко не пионер, поэтому дали взглянуть на аналог будущей программы, который работал ещё под DOS и печатались отчёты на дико скрипящем матричном принтере с 12-ю иголками. Ну посмотрел, элементарная таблица, расчёт немного запутан, но жить можно — начал по-тихоньку писать. И попалась мне тогда на глаза статейка про работу с Excel в Delphi. Вот я и решил попробовать выдавать отчёт не только на форму приложения, а ещё и скидывать весь ход расчёта с формулами и прочим делом в Excel…Надо сказать более сильно детской радости начальника отдела я не видел до сих пор :). Люди, всю жизнь проработавшие в DOS увидели как тот же самый расчёт может выглядеть в современных условиях. Вот теперь при определении технических заданий на каждую новую программу, обязательно присутствует пункт, гласящий, что программа должна передавать данные либо в MS Word либо в MS Excel.Соответственно и цена на разработку возрастает, иногда значительно.
Отсюда можно сделать простой и однозначный вывод — заказчики готовы пожертвовать лишними деньгами только для того, чтобы всё в программе было красиво. Excel может дать вашему приложению ту самую красоту и удобство.
Ну, а для того, чтобы каждый раз не утруждать себя выполнением однотипных операций, я разработал небольшой модуль для работы с Excel. Этот же модуль я в настоящее время дорабатываю под ещё одну задачу, но об этом после. Сегодня основы основ работы с Excel в Delphi.
1. Как проверить установлен ли Excel на компьютере пользователя?
Создаем новый модуль (unit) и подключаем в uses следующие модули:
Источник
Delphi. Записки на полях.
Основы работы с Excel в Delphi.
Видимо любители экономить килобайты оперативной памяти могут меня закидать помидорами или ещё чем по-хуже, но все-таки я скажу, что интеграция приложений (мегабайты оперативы) — это большой плюс нынешней разработки приложений.
Как ни крути, а время DOS и килобайтов оперативной памяти прошло. Врядли кто-то всерьез сейчас задумывается над тем куда это с винчестера пропал мегабайт? Да и использование в своих приложениях функциональности программ, которых ты не писал, но которые выполняют что-то лучше — это всё-таки больший прогресс, нежели корпеть год-два над программой, а потом узнать, что время-то прошло.
Итак, цель сегодняшней статьи — поделиться с Вами опытом работы с Microsoft Excel в приложениях, написанных на Delphi.
Вспомнился сейчас один случай. Когда я только начинал работать по своей специальности, пригласили меня написать программу-расчётник для экологов нашего нефтезавода. В принципе ничего серьёзного — программа считает выброс от нагревательной печи и выдает табличку результатов, которую необходимо распечатать и уложить в толстую папку с отчётами. Естественно, что в области разработки подобных приложения я далеко не пионер, поэтому дали взглянуть на аналог будущей программы, который работал ещё под DOS и печатались отчёты на дико скрипящем матричном принтере с 12-ю иголками. Ну посмотрел, элементарная таблица, расчёт немного запутан, но жить можно — начал по-тихоньку писать. И попалась мне тогда на глаза статейка про работу с Excel в Delphi. Вот я и решил попробовать выдавать отчёт не только на форму приложения, а ещё и скидывать весь ход расчёта с формулами и прочим делом в Excel…Надо сказать более сильно детской радости начальника отдела я не видел до сих пор :). Люди, всю жизнь проработавшие в DOS увидели как тот же самый расчёт может выглядеть в современных условиях. Вот теперь при определении технических заданий на каждую новую программу, обязательно присутствует пункт, гласящий, что программа должна передавать данные либо в MS Word либо в MS Excel.Соответственно и цена на разработку возрастает, иногда значительно.
Отсюда можно сделать простой и однозначный вывод — заказчики готовы пожертвовать лишними деньгами только для того, чтобы всё в программе было красиво. Excel может дать вашему приложению ту самую красоту и удобство.
Ну, а для того, чтобы каждый раз не утруждать себя выполнением однотипных операций, я разработал небольшой модуль для работы с Excel. Этот же модуль я в настоящее время дорабатываю под ещё одну задачу, но об этом после. Сегодня основы основ работы с Excel в Delphi.
1. Как проверить установлен ли Excel на компьютере пользователя?
Создаем новый модуль (unit) и подключаем в uses следующие модули:
теперь объявляем глобальную переменную:
Одну константу (для удобства):
И пишем простенькую функцию:
Если функция CLSIDFromProgID находит CLSID OLE-объекта, то, соответственно — Excel установлен.
Но проверка на наличие установленного Excel — это только часть необходимых операций перед началом работы. Другой немаловажной проверкой является проверка на наличие уже запущенного экземпляра Excel. Если этого не делать, то может случиться такая нехорошая ситуация, когда в системе будет зарегистрировано …дцать процессов Excel и все оперативная память волшебным образом утекет «в трубу» — за такое могут и по ушам надавать. Но мы-то свои уши бережем. Пишем вторую функцию проверки.
2. Как определить запущен ли Excel?
Думаю тут лишних объяснений не потребуется? Всё предельно просто — если есть активный процесс Excel, то му просто получаем на него ссылку и можем использовать Excel для своих корыстных целей. Главное — не забыть проверить — может кто-то этот самый Excel забыл закрыть, но это другой момент. Будем считать, что Excel в нашем полном распоряжении.
3. Как запустить Excel?
Одно дело, когда мы получаем в распоряжение уже запущенный Excel, другое — когда Excel требуется запустить из Delphi. Напишем функцию запуска Excel:
Здесь мы в начале проверяем, установлен ли Excel в принципе и, если он все же установлен, запускам. При этом мы можем сразу показать окно Excel пользователю — для этого необходимо выставить параметр Visible в значение True.
Также рекомендую всегда отключать системные сообщения Excel, иначе, когда программа начнет говорить голосом Excel — пользователь может занервничать.
Переходим к следующему этапу работы — созданию рабочей книги.
4. Создаем пустую рабочую книгу Excel
Для создания пустой рабочей книги я обычно использую вот такую функцию:
Т.е. сразу проверяю запущен ли Excel и, если он не запущен, то либо запускаю и добавляю книгу, либо просто выхожу — всё зависит от ситуации.
Здесь, думаю, следует напомнить, что, если вы выполните эту функцию, например пять раз, то получите пять открытых рабочих книг и работать с ними как Вам захочется. Главное при этом правильно обратиться к необходимой книге, а для этого можно использовать вот такую функцию:
Функция возвращает список TStringList всех рабочих книг Excel открытых в данный момент. Обратите внимание, что в отличие от Delphi Excel присваивает первой книге индекс 1 , а не 0 как это обычно делается в Delphi при работе, например, с теми же индексами в ComboBox’ах.
Ну, и наконец, после того, как поработали с книгами — их требуется закрыть. Точнее сохранить, а потом уж закрыть.
5. Сохраняем рабочую книгу и закрываем Excel
Для того, чтобы сохранить рабочую книгу, я использовал такую функцию:
Если у Вас открыто 10 книг — просто вызываете функцию 10 раз, меняя значение параметра WBIndex и имени файла и дело в шляпе.
А закрывается Excel вот так:
Вот набор тех основных функций с которых начинается вся интеграция Excel в приложения написанные на Delphi. В следующий раз займемся работой с конкретной книгой — научимся записывать и читать данные из книг.
Источник
Работа с Excel из Delphi. Часть 1
Опубликовано Va-Bank в ПТ, 12/11/2010 — 23:57
Подготовка
Откроем нашу среду разработки Delphi (в моем случае это Delphi 2010). Создадим новый проект. Должен сказать, что работа с Excel происходит через объекты COM. Поэтому нам надо подключить в раздел USES нашего проекта модуль COMObj . Так же нам понадобится модуль ActiveX . Это будет выглядеть примерно вот так:
Проверка наличия установленного Microsoft Excel в операционной системе
Теперь собственно нам нужно, как писалось выше, определить наличие Excel в системе. Если он не будет обнаружен, то мы сообщим об этом пользователю и завершим программу. Для этого создадим простенькую функцию и объявим её в секции private нашей формы TForm1 :
то там можно будет обнаружить много разделов. Среди них есть как раз нужный нам «Excel.Application» (при условии, что данное ПО установлено в системе). К сведению: у этого раздела имеется еще два подраздела:
Параметры функции:
— pszProgID : строка, содержащая ProgID.
— clsid : получает CLSID.
Возвращаемые значения:
— S_OK — CLSID создан успешно.
— CO_E_CLASSSTRING — CLSID зарегистрированный для ProgID неверен.
— REGDB_E_WRITEREGDB — ошибка записи в реестр.
— E_OUTOFMEMORY — нет памяти.
— E_INVALIDARG — указывает что один или более аргументов неверны. Стоит проверить правильность строки pszProgID.
— E_UNEXPECTED — неизвестная ошибка.
Теперь на событии OnCreate формы TForm1 напишем следующий код:
Проверить, запущен ли Microsoft Excel
Далее давайте кинем на форму одну кнопку TButton. На событии OnClick будем писать код работы с Excel. Первое что мы сделаем, это добавим локальную переменную типа Variant для доступа к Excel с именем, например, FExcel :
Создание нового экземпляра Microsoft Excel
Создать новый экземпляр можно с помощью функции CreateOleObject . Давайте сразу напишем шаблон.
Операции над программой Microsoft Excel из Delphi
Теперь давайте рассмотрим, что вообще можно делать с Excel из Delphi. Операций достаточно много. И все описать просто невозможно. Но если в моем описании не окажется нужного вам метода, то огорчаться не стоит. Методы можно узнать самому. Открываете Excel. Затем в меню Сервис – Макрос – Начать запись . Там жмем ОК и выполняем необходимые нам операции в Excel. Когда закончите, жмем на Стоп . Затем нажимаем комбинацию клавиш Alt+F11 и перед нами открывается редактор Visual Basic . Вот в нем слева вверху есть древовидный список. В нем находится папка с названием Modules . В свою очередь в ней располагаются модули. Вот эти модули и есть ваши макросы. Кликнем два раза на тот модуль, который мы только что записали (если это первая запись, то модуль будет один). И тут будут отображены все ваши действия в виде исходного кода на языке Visual Basic. Вам остается только перевести это дело на Delphi.
По поводу констант. В Delphi придется объявлять их самим. Посмотреть чему они равны можно в том же редакторе Visual Basic. Делается это так. Вписываем любую нужную нам константу в редакторе. Кликаем правой клавишей мыши, чтобы появилось контекстное меню. И там выбираем пункт «Quick Info» . При этом будет показана всплывающая подсказка со значением этой константы. Все просто! Единственное оговорюсь. В Visual Basic будет показано так, например: &HFFFFEFF4 , но Delphi этого не поймет. Надо объявлять в нем так: $FFFFEFF4 .
FExcel.Visible := true;
Делать Excel видимым (True)/не видимым(False). При установке Visible в FALSE , программа Excel Так же пропадает из панели задач Windows.
FExcel.Application.EnableEvents := false;
Показывать (True)/не показывать(False) системные сообщения Excel. Рекомендую отключать сообщения при построении отчета. А сам код писать после создания экземпляра Excel. Это увеличит скорость создания отчета. Пример:
FExcel.WindowState := xlMaximized;
Состояние окна Excel:
const xlMaximized = $FFFFEFD7 (или -4137) — развернуть Excel на весь экран.
const xlNormal = $FFFFEFD1 (или -4143) — восстановить Excel.
const xlMinimized = $FFFFEFD4 (или -4140) — свернуть Excel на панель задач.
FExcel.ScreenUpdating := false;
Включить (True)/отключить (False) перерисовку окон. Используется для ускорения работы макроса, т.к. в это время не обновляется экран. Я в своих проектах не использовал данный метод, но возможно построение отчета будет выполняться быстрее, если отключить обновление окон Excel. После построения отчета перерисовку окон можно будет включить обратно.
FExcel.Workbooks.Open(path);
Открытие существующей книги (где path — путь к фалу). Функция Open описана так:
UpdateLinks — Необязательный параметр. Определяет способ обновления связи в открываемом файле. Если данный аргумент отсутствует, то пользователю будет выдан запрос на определение способа обновления связей. Данный параметр имеет следующие допустимые значения:
0 – никакие связи не обновляются;
1 – обновляются внешние ссылки, но не обновляются удаленные ссылки;
2 – обновляются удаленные ссылки, но не обновляются внешние ссылки;
3 – обновляются оба типа ссылок
ReadOnly — необязательный параметр. Если файл имеет атрибут только для чтения, то при открытии его в Excel выдается соответствующее предупреждение*. Чтобы его игнорировать, передайте в качестве данного параметра True.
Format — необязательный параметр. При открытии текстового файла этот параметр определяет вид символов-разделителей. Ниже представлены допустимые значения данного аргумента:
1 – символы табуляции;
2 – запятые;
3 – пробелы;
4 – точка с запятой;
5 – разделители отсутствуют;
6 – вид разделителя определяется пользователем (с помощью параметра Delimiter).
Password — необязательный параметр, задающий строку пароля, необходимого для открытия защищенной рабочей книги. Если при открытии защищенной книги данный аргумент отсутствует, то пользователю будет выдан запрос на ввод пароля*.
WriteResPassword — необязательный параметр. Предназначен для задания пароля, необходимого для записи в рабочую книгу. Если при открытии защищенной книги данный аргумент отсутствует, то пользователю будет выдан запрос на ввод пароля*.
IgnoreReadOnlyRecommended — необязательный параметр. В случае задания ему значения True этот аргумент позволяет устранить вывод сообщения с рекомендацией открытия книги только для чтения (в том случае, если данная рабочая книга была сохранена с параметром Read-Only Recommended).
Origin — необязательный параметр. При открытии текстового файла этот параметр указывает, где был создан этот файл, что необходимо для правильного распознавания страницы кодировки. Значениями данного аргумента может быть одна из констант: xlMacintosh, xlWindows или xlMSDOS**. Если данный аргумент отсутствует, то используются текущие параметры операционной системы.
Delimiter — необязательный параметр. Если открывается текстовый файл и параметр Format имеет значение, равное 6, то этот аргумент определяет символ-разделитель.
Editable — необязательный параметр. Если файл является файлом MS Excel 4.0, то этот параметр при задании ему значения True позволяет открыть надстройку как видимое окно. По умолчанию ему присвоено значение False.
Notify — необязательный параметр. Если файл не может быть открыт для записи, то при задании данному аргументу значения True файл будет добавлен в список уведомления. Если данный аргумент равен False или отсутствует, то открыть файл будет невозможно.
Converter — необязательный параметр. Предназначен для определения индекса фильтра, который будет использован при открытии данного файла. Если фильтр не сможет распознать формат файла, то будут последовательно использованы все доступные фильтры.
AddToMRU — необязательный параметр типа Variant. Если данный параметр имеет значение True, то рабочая книга будет добавлена в список недавно использованных файлов. По умолчанию ему присвоено значение False.
Примечание:
* Сообщения будут выведены на экран, если вы не отключили их с помощью:
FExcel.Application.EnableEvents := false;
Показывать (True)/не показывать(False) системные сообщения Excel.
** Delphi не знает о существовании констант, поэтому чтобы посмотреть их значения, нужно воспользоваться средствами VBA. Эти константы соответственно равны 1, 2 и 3.
FExcel.Workbooks.Add(path); // path — путь к фалу
Создание новой книги. Причем создается стандартная книга с тремя листами. В этом методе можно указать стандартный тип шаблона Excel. Если же в нем указать имя (с полным путем) подготовленного файла (шаблоном может быть и «обычный» файл XLS, а не только файл XLT), то можно открыть книгу на диске как шаблон.
FExcel.Workbooks.Add(Template);
Template — Необязательный параметр. Этот параметр определяет, как будет создана рабочая книга. Если этот параметр будет иметь значение строки, определяющей имя файла (включая путь) существующей рабочей книги, то создается рабочая книга с использованием данного файла как шаблона. В случае когда данный параметр является одной из констант: xlWBATExcel4IntlMacroSheet = 4;
xlWBATExcel4MacroSheet = 3;
xlWBATWorksheet = $FFFFEFB9 (или -4167);
xlWBATChart = $FFFFEFF3 (или -4109);
Создаваемая книга будет содержать один лист соответствующего типа. В том случае, если этот параметр отсутствует, то создается рабочая книга с количеством листов, определяемым значением свойства SheetslnNewWorkbook .
FileFormat — необязательный параметр. Данный параметр задает формат файла. Его значением может быть одна из констант, описанных в таблице 1 . В том случае, если файл уже существует, в качестве его формата по умолчанию будет назначен формат, использовавшийся при его предыдущем сохранении.
Password — необязательный параметр. Данный параметр определяет защитный пароль для сохраняемого файла. Пароль определяется строкой, содержащей не более 15 символов.
WriteResPassword — необязательный параметр. Предназначен для задания строки, определяющей пароль для сохранения файла в качестве файла только для чтения. При последующем открытии файла будет выдан запрос на ввод этого пароля, и если он не будет введен, то файл будет открыт в режиме только для чтения.
ReadOnlyRecommended — необязательный параметр. В случае присвоения ему значения True, последующее открытие файла на экране будет сопровождаться сообщением, говорящим о том, что этот файл рекомендуется открыть в режиме только для чтения.
CreateBackup — необязательный параметр. Определяет возможность создания резервного файла (значение True).
AccessMode — необязательный параметр. Этот параметр определяет режим доступа к рабочей книге и может иметь одно из следующих значений:
xINoChange – режим доступа не изменяется (равно 1);
xlShared – общие листы (равно 2);
xlExclusive – монопольный доступ (равно 3).
ConflictResolution — необязательный параметр. Определяет способ разрешения конфликтов в том случае, если книга имеет общие листы. Значением данного свойства может быть значение одной из констант:
xlUserResolution — отображает окно диалога для разрешения конфликтов (равно 1);
xlLocalSessionChanges — автоматически принимаются изменения локального пользователя (равно 2);
xlOtherSessionChanges — принимаются другие изменения вместо изменений локального пользователя (равно 3).
AddToMru — необязательный параметр. Позволяет поместить сохраняемый файл в список сохраненных файлов в меню Файл (File). Для реализации этой возможности значение этого аргумента должно равняться True.
TextCodePage — необязательный параметр. В локализованной версии MS Office не используется.
TextVisualLayout — необязательный параметр. В локализованной версии MS Office не используется.
FWorkbook.Close;
Закрыть книгу. При этом если Excel видимый, то появится диалог с вопросом, хотите ли вы сохранить файл.
Функция Close описана так:
FExcel.Workbooks[1].WorkSheets[1] .Name := ‘Отчёт’;
Присваиваем первому листу в первой книге имя «Отчет». Если будем работать с самим листом, то чтобы не писать много кода мы можем просто объявить новую переменную, например, FSheet типа Variant :
И присвоим ей ссылку на наш Лист1 первой книги:
FSheet.PageSetup.Orientation := 2;
Ориентация страницы (1 – книжная, 2 – альбомная).
FSheet.PageSetup.LeftMargin := X;
Отступ от левого края страницы
FSheet.PageSetup.RightMargin := X;
Отступ от правого края страницы
FSheet.PageSetup.TopMargin := X;
Отступ от верхнего края страницы.
FSheet.PageSetup.BottomMargin := X;
Отступ от нижнего края страницы.
FSheet.PageSetup.HeaderMargin := X;
Высота верхнего колонтитула страницы.
FSheet.PageSetup.FooterMargin := X;
Высота нижнего колонтитула страницы.
Где X — это отступ в пикселях. Можно в принципе воспользоваться функцией перевода из, например, сантиметров в пиксели. Делается это так:
FSheet.PageSetup.BottomMargin := FExcel.Application.CentimetersToPoints(1.5);
Это будет полтора сантиметра, а как там переводится в пиксели это не наша забота.
FSheet.PageSetup.Zoom := false (или значение в процентах Z);
Масштаб. Принимает следующие значения:
Z — «Установить Z% от натуральной величины», где X – это количество процентов. Т.е. если вы решите включить масштабирование, то вам необходимо вместо FALSE подставить число, например: FSheet.PageSetup.Zoom := 100; (что означает 100%).
FALSE — «Разместить не более чем на: X стр. в ширину и Y стр. в высоту, где:
FSheet.PageSetup.FitToPagesWide := 1;
Количество страниц в ширину (X).
FSheet.PageSetup.FitToPagesTall := 100;
Количество страниц в высоту (Y).
FSheet.PageSetup.CenterFooter := ‘Стр. &С из &К’ ;
Центральный нижний колонтитул. В нем будет информации о номере страницы из всего страниц. Данные переменные (&C, &K и т.п.) описаны в справочнике самого Excel. Аналогично:
FSheet.PageSetup.LeftFooter:=’Левый нижний колонтитул’;
FSheet.PageSetup.RightFooter:=’Правый нижний колонтитул’;
FSheet.PageSetup.LeftHeader:=’Левый верхний колонтитул’;
FSheet.PageSetup.CenterHeader:=’Центральный верхний колонтитул’;
FSheet.PageSetup.RightHeader:=’&7Правый верхний колонтитул’; *
Примечание: *для изменения размера шрифта добавьте к колонтитулу управляющий символ «&» и размер шрифта, в нашем случае 7
// const xlAutomatic = $FFFFEFF7 (или -4105)
FSheet.PageSetup.FirstPageNumber := xlAutomatic;
Номер первой страницы. В данном случае «Авто».
FSheet.PageSetup.Order := 1;
Последовательность вывода страниц на печать (1 — вниз, затем вправо; 2 — вправо, затем вниз).
FSheet.PrintPreview;
Предварительный просмотр страницы. Если вы не продолжите печать, а нажмете «Отмена», то будет вызвано исключение.
Примечание : Excel, перед выполнением этой команды, обязательно должен быть видимым (FExcel.Visible := true;).
FSheet.PrintOut;
Вывод страницы на печать. Функция PrintOut описана так:
To — необязательный параметр. Задает последнюю печатаемую страницу. Если этот аргумент отсутствует, то печать продолжается до последней страницы.
Copies — необязательный параметр. Задает количество печатаемых копий.
Preview — необязательный параметр, принимающий одно из двух значений:
TRUE — приводит к выводу перед печатью окна предварительного просмотра;
FALSE (значение по умолчанию) — печать производится без предварительного просмотра.
ActivePrinter — необязательный параметр. Задает имя активного принтера.
PrintToFile — необязательный параметр. Если данный параметр имеет значение True, то производится печать в файл. При этом пользователю выдается запрос на ввод имени файла.
Collate — необязательный параметр. Если ему задать значение True, то копии будут объединены.
Пример:
Источник
← →
}|{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 попадалась :)))
Записать в Excel XML из Delphi / Lazarus
Когда задача стоит “Сохранить из Delphi или Lazarus в Excel” у разработчика просто огромный выбор — частично он описан в статье “Как записать в XLS Biff8 из Delphi”, там же я вкратце расписал, почему это плохой выбор. А что же тогда хорошо? А хорошо — сохранять в новый (ну, относительно новый) XML XLSX.
Но Microsoft не был бы собой, если бы, традиционно не попытался сделать “свой собственный XML — c блэкджеком и ячейками!”. А потому у Excel на самом деле есть не один а целых два(!) XML-стандарта для хранения Excel-файлов: более ранний и более правильный.
Видим окно предварительного просмотра и кнопку “сохранить”
“Эй, уважаемый, а мне, простому программисту чем пользоваться?!” — спросите вы и будете совершенно правы. Короткий ответ — 2007 XML, более поздний. А ниже я расскажу, почему.
Углубиться в тему XML используемого с 2007 и далее можно тут — там целый мир!
А мы просто сравним два варианта сохранения в XML и XLSX XML и решим, какой использовать рациональнее и в каких случаях.
Экспорт в XML — более простой. Экспортируются только текстовые объекты. Изображения, графики, карты, штрихкоды, форматирование TfrxRichView, HTML-тэги и фоновое изображение в результирующий Excel XML не попадут.
Ниже традиционно распишу, как реализовать сохранение в Excel XML полностью из кода, если не хочется или не требуется показывать предпросмотр и давать возможность отправить на печать. Окошко настроек экспорта в XML . Специально размещаю рядом для сравнения настройки. Всё не просто, а очень просто!
Средства FastReport помогают выбрать, какие страницы нашего документа отправить в Excel, диапазон или только определённые страницы.
Настройки экспорта – большее визуальное соответствие с начальным вариантом (WYSIWYG), разрыв страницы, и continuous — непрерывный документ с пропуском промежуточных заголовков и подвалов страниц.
Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой Microsoft Excel (Ну или что у пользователя в системе ассоциировано с файлами расширения XLSX для их открытия).
Записать в Excel XML из Delphi / Lazarus — Fast Reports
Но автор сам в задачке выбрал OLE. И в место того чтобы подсказать ты его запутываешь каким то ADO (может он впервые еще сталкивается с SQL). Да к тому же еще не зная подойдет ли его файлик (а судя из задачки он у него уже есть) для подключения через ADO.
[expert_bq id=»1570″]Когда нам необходимо работать с Excel, то обычно мы открываем ExcelApplication, затем открываем WorkBook и в конце используем WorkSheet. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
Знающие люди говорят, что это свойство отвечает за перерисовку окон Excel. Это все равно, что DisableControls у TDataSet. Добавляет скорости, если в нем false. И это правда что, если выключить его во время длительных пересчетов, то быстрее пересчитается. Но мы, ведь, не выключали его. Зачем тогда эта строка?
Разберёмся подробнее почему XLSX весит больше XML. За основу взяли вот этих прекрасных рыбок. Данный документ содержит много текста, табличные данные и 30 фотографий. Для большей наглядности сравним ещё и нестареющий Excel 97, о котором мы говорили в другой статье.
Записываем XLS из Delphi c помощью FastReport
Итак, ваш документ содержит большие таблицы, многоуровневые списки, иллюстрации, карты, штрих-коды и вы думаете, как бы это перенести в Excel?
Не буду тут повторно останавливаться на создании отчёта — бросили на форму проекта TfrxReport, TfrxBIFFExport и TButton, прописали на кнопку вызов
— строим отчёт и запускаем окно предпросмотра того, что получилось.
Видим окно предварительного просмотра и кнопку “сохранить”
И, в принципе, как будет выглядеть результат: разбивать на страницы, оставив в изначальном виде, расположить всё на одной странице или же поделить на части с задаваемым количеством строк.
Можно указать, куда отправить Excel-файл (локально в память компьютера, на электронную почту или поместить в облако).
Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой Microsoft Excel.
Служебная информация, которая также пойдёт в Excel-файл: название, автор, ключевые слова, версия документа, приложения, категория, менеджер и комментарий к файлу.
Безопасность — защита паролем документа (дополнительно можно указать подтверждение).
Если задать непустую строку пароля, то сгенерированный файл будет защищён паролем. Пароль пишется только символами Юникода и должен быть короче 256 символов.
Опции – настройка документа на большее визуальное соответствие с первоначальном вариантом (WYSIWYG), экспорт в таблицу картинок-изображений, отображения границ ячеек, выставлять размер страницы, удаление пустых строк (для экономии места в этом конкретном формате очень важная опция), экспорт формул.
Если не нужно столь подробно выставлять параметры, то можно оставить всё по умолчанию.
Программирование на Delphi. Excel (ifaq): Рассылка.
На главной форме проекта-примера я создал кнопку, с помощью которой можно открыть (или создать) файл и RadioGroup к ней, где можно указать каким из приведенных выше способов файл этот открывается. Для полного удовлетворения сюда же была добавлена обработка исключения. Вот что у меня получилось:
[expert_bq id=»1570″]Кстати, в импортированной Excel Type Library независимо от версии Delphi — 4 или 5 некоторые свойства, имеющие dispid 0, почему-то все-таки объявлены как default. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
После такого действия у меня возникает ощущение, что я переплатил за свою видеокарту. Фокус в Excel-е, но я по-прежнему наблюдаю форму демо-проекта. Видимо, программисты из MS не рассчитывали на то, что кто-то закроет Excel, вызванный через создание Excel.Application, а потом захочет увидеть его снова. Но я-то захотел?!
Как создать файл в Excel 97(2000, XP file) — XLS из Delphi / C Builder / Lazarus? Fast Reports
в студию )) где стоит Delphi её насильно втюхиватьдругим именем. невозможен. Проверьте следующее: программе путь к которую я написала программы на другойвыберите пункт действий: ссылку.Более новые версии начинается веселье, а: Если честно, идей
ведения журнала. помочь какие-то сервис-паки. ошибка — после Так сложно что-то все нормально работает пока бабло с
Запись данных в Excel
Здесь мы вначале создаем двумерный вариантный массив, используя метод VarArrayCreate, после чего заполняем массив данным и передаем этот массив в Excel. Обратите внимание, что при записи в Excel не используются никакие циклы — запись происходит в 2 простых действия:
Для полноты картины ниже на рисунке представлено значение счётчика, который отсчитал время от момента создания массива до активации приложения Excel включительно:
Про эту библиотеку мне поведал один из читателей блога в комментарии как раз-таки к посту «»Работа с Excel в Delphi. Основы основ«. Чтобы лишний раз Вас не переправлять на комментарий с примером использования этой библиотеки, я с разрешения GS (ник автора кода) просто опубликую здесь уже готовые примеры использования библиотеки XLSReadWrite:
[expert_bq id=»1570″]В delphi работа с файлами несколько различается в зависимости от того, надо ли записывать в файл произвольный текст, или это будет последовательность однотипных данных. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
Вот мы лет эдак 6+ назад делали систему, которая закачивала данные из филиалов в консолидированную бд. ДАнные шли разного формата, и эксель и пдф и csv и . так вот всем были спущены указания как формировать эти самые данные, по вашей логике, всяк мог накосячить чего угодно, а мы должны угадать чего накосячили?
Delphi работа с файлами
- Каким образом можно импортировать данные из таблицы Excel в таблицу БД?
- Можно ли использовать функции Drag&Drop? Скопировать диапазон в Excel и вставить в таблицу (для отображения данных использую компонент DBGrid)?
Завершение работы с файлом закрывает файл. С практической точки зрения это означает, что к файлу больше нельзя обратиться процедурами записи или чтения. С другой стороны, теперь файл доступен для удаления и редактирования средствами файловой системы, например, с помощью «блокнота».