:: Visual Foxpro, Foxpro for DOS
VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Доброго дня всем!

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

Может быть уважаемое сообщество подскажет, как при открытии программно Ехел из фокса эту надстройку можно увидеть или , возможно, другое решение есть?
Ratings: 0 negative/0 positive
Re: VFP - Exel
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
PaulWist
https://forum.foxclub.ru/read.php?32,177179,177249#msg-177249

Это понятно, как создать, я разобрался.
Проблема в том, что сгенерированный и открытый из фокса документ не видит надстройку, в отличие от этого же документа, открытого позднее непосредственно из Ехел.
Можно в ячейку послать "=Суммапрописью(X13)", можно это поместить в ячейке шаблона, но это все не работает, поскольку не видна надстройка Ехеля при создании и открытии документа программно.
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
Однако, если документ создан и открыт из фокса, то не видит этой надстройки
Мне помогал такой финт - программное переподключение надстройки (естественно, она должна быть уже установлена):
oxls.app.AddIns("Sumprop").Installed = .F. && отключаем надстройку
oxls.app.AddIns("Sumprop").Installed = .T. && подключаем надстройку вновь
...
osheet.cells(20,6).value = [= СуммаПрописью(987.36)] && пользуемся...

Дёрнуть свойство Installed достаточно один раз, но обязательно до первого использования надстройки.
Иначе те ячейки, значения которых были установлены до изменения Installed, юзер сначала увидит как #ИМЯ?, и придется эти ячейки "прощёлкивать" (F2, Enter), чтобы увидеть результат (ну, или закрывать и вновь открывать файл).

Правда, любое использование этой надстройки (а может, и любой надстройки - не выяснял) устанавливает в True значение oxls.app.displayalerts.
Поэтому, если вам важна настройка displayalerts в процессе создания листов (мне была важна), то либо разберитесь, почему так происходит, либо сделайте, как сделал я - вынес команду присвоения Value в отдельную функцию, которая перед выходом восстанавливает значение displayalerts.

Если предложенный финт с переподключением не поможет, то убедитесь, что файл надстройки sumprop.xla лежит в нужной папке:
c:\Users\<имя_юзера>\AppData\Roaming\Microsoft\AddIns\

Возможно, кто-то подскажет и другой способ решения этой проблемы (например, что-то подправить в настройках самого Excel) - я не слишком стремился разобраться в деталях, так как приведенный способ меня устроил.
Ratings: 0 negative/1 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
akvvohinc
DmitryKn
Однако, если документ создан и открыт из фокса, то не видит этой надстройки
....
Дёрнуть свойство Installed достаточно один раз, но обязательно до первого использования надстройки.
....

Попробую, отпишусь.
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
akvvohinc
DmitryKn
Однако, если документ создан и открыт из фокса, то не видит этой надстройки
...
Если предложенный финт с переподключением не поможет, то убедитесь, что файл надстройки sumprop.xla лежит в нужной папке:
c:\Users\<имя_юзера>\AppData\Roaming\Microsoft\AddIns\
...

А можно ли как-то обратиться к надстройке , если лежит в другом месте? В моем случае в 'C:\Program Files (x86)\Microsoft Office\Office12\Library\'
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
А можно ли как-то обратиться к надстройке , если лежит в другом месте? В моем случае в 'C:\Program Files (x86)\Microsoft Office\Office12\Library\
У вас команда
oxls.app.AddIns("Sumprop").Installed = .F.
отрабатывает нормально или выдаёт ошибку (если ошибку, то какую)?
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Строка в таком виде
loBook = loExcel.Workbooks.Open(m.lcXlsDir)
...
loExcel.app.AddIns("SummaPropisju").Installed = .F.

Ошибка 1426

Но лежит надстройка не в AddIns
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
А пришлите скрин формы:
Файл -> Параметры -> Надстройки
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Скрин
Ratings: 0 negative/0 positive
Re: VFP - Exel
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
akvvohinc
У вас команда
oxls.app.AddIns("Sumprop").Installed = .F.
отрабатывает нормально или выдаёт ошибку (если ошибку, то какую)?

что за .app. ?

for i = 1 To oXls.AddIns.Count
if oXls.AddIns(i).Installed
oXls.AddIns(i).Installed = .F.
oXls.AddIns(i).Installed = .T.
endif
endfor
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
Скрин
Надо указывать не имя файла настройки, а имя настройки:
loExcel.app.AddIns("Сумма прописью").Installed = .F.
У меня эти имена совпадали.

vk65
что за .app. ?
У меня Microsoft Office 2010 (папка Office14) - в ней oxls не имеет коллекции AddIns, она находится в oxls.app.



Исправлено 1 раз(а). Последнее : akvvohinc, 05.06.23 02:04
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Большое спасибо, друзья, заработало!

Решение такое:
* У меня офис 2007 , поэтому .app вызывает ту же ошибку, видимо в более новых надо использовать, вникать не стал, поскольку и так работает.
* Указываем название надстройки, не имя файла.
loExcel.AddIns("Сумма прописью").Installed = .F.
loExcel.AddIns("Сумма прописью").Installed = .T.

Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
У меня офис 2007 , поэтому .app вызывает ту же ошибку, видимо в более новых надо использовать, вникать не стал, поскольку и так работает.
По-хорошему, надо написать этот код так, чтобы он работал независимо от установленной версии Excel.
Например, проверяя наличие APP с помощью PEMSTATUS:
oxlsA = IIF(PEMSTATUS(oxls,'app',5),oxls.app,oxls)
Ну, или по старинке, используя TYPE().
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Спасибо, так и сделаю!

Но это только для инициирования надстройки, для ячеек это не используем?
Например:

Просто прямо сразу попробовать нет возможности.



Исправлено 6 раз(а). Последнее : DmitryKn, 06.06.23 11:04
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Но это только для инициирования надстройки, для ячеек это не используем?
У меня oxls.app встречается ещё только в одном месте:
oxls.app.displayalerts

В общем, по названию app (от application) понятно, что туда вынесены некие глобальные вещи.
Ratings: 0 negative/0 positive
Re: VFP - Exel
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Спасибо!
Ratings: 0 negative/0 positive
Re: VFP - Exel
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
У меня Microsoft Office 2010 (папка Office14) - в ней oxls не имеет коллекции AddIns, она находится в oxls.app
akvvohinc
надо написать этот код так, чтобы он работал независимо от установленной версии Excel.
Например, проверяя наличие APP с помощью PEMSTATUS
Что-то не догоняю про именно APP. Просто не помню, чтобы на каких-то версиях его видел. Зато есть объект Application: learn.microsoft.com) Куски оттуда:
Цитата:
Представляет всё приложение Microsoft Excel. Объект Application содержит:
– Параметры и настройки на уровне приложения.
– Методы, возвращающие объекты верхнего уровня, такие как ActiveCell, ActiveSheet и т. д.
Многие свойства и методы, возвращающие наиболее распространенные объекты пользовательского интерфейса, такие как активная ячейка (свойство ActiveCell), можно использовать без квалификатора объекта Application.
Насколько помню свои разборы, чем новее версия офиса, тем большее количество свойств (всякие Visible, ScreenUpdating, DisplayAlerts) дублировалось и можно писать без ".Application". В том числе, смотрю на Excel 2021 (папка Office16), там есть и oXl.Application.AddIns, и oXl.AddIns.

Но я о другом. Везде речь идёт именно об ".Application", упоминаний ".app" не вижу :al:
Ratings: 0 negative/0 positive
Re: VFP - Exel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
Но я о другом. Везде речь идёт именно об ".Application", упоминаний ".app" не вижу
Разобрался - это моя вина, ввел всех, и себя в том числе, в заблуждение.
За давностью лет забыл, что и как когда-то делал.

Дело в том, что помимо Excel мы использовали одну стороннюю DLL, которая умеет делать excel-файлы (с некоторыми ограничениями), но на порядок быстрее.
А поэтому пришлось сделать класс, работающий и с Excel, и с этой DLL, "скрывающий" разницу между ними.

Дальнейшие подробности неинтересны, но в результате объект APP в этом классе просто является синонимом Excel.application.

Ну, а при работе с Excel "напрямую", то есть
oXls = CREATEOBJECT('excel.application')

ссылки oXls и oXls.application равны:
? oXls = oXls.application && .T.



Исправлено 1 раз(а). Последнее : akvvohinc, 13.06.23 16:54
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 25 (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика