VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Доброго дня всем!
Из фокса создаю документ в Ехел, он открывается и редактируется, и там в одном месте нужна сумма прописью и пользователь руками набирает сумму. Решил немного улучшить, поставил надстройку в Ехел "Суммапрописью", в Ехел все работает хорошо. Однако, если документ создан и открыт из фокса, то не видит этой надстройки, если сохранить, и открыть файл заново - то все нормально. Может быть уважаемое сообщество подскажет, как при открытии программно Ехел из фокса эту надстройку можно увидеть или , возможно, другое решение есть? |
Re: VFP - Exel | |
---|---|
PaulWist Сообщений: 14621 Дата регистрации: 01.04.2004 |
forum.foxclub.ru
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Это понятно, как создать, я разобрался. Проблема в том, что сгенерированный и открытый из фокса документ не видит надстройку, в отличие от этого же документа, открытого позднее непосредственно из Ехел. Можно в ячейку послать "=Суммапрописью(X13)", можно это поместить в ячейке шаблона, но это все не работает, поскольку не видна надстройка Ехеля при создании и открытии документа программно. |
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Мне помогал такой финт - программное переподключение надстройки (естественно, она должна быть уже установлена):
Дёрнуть свойство Installed достаточно один раз, но обязательно до первого использования надстройки. Иначе те ячейки, значения которых были установлены до изменения Installed, юзер сначала увидит как #ИМЯ?, и придется эти ячейки "прощёлкивать" (F2, Enter), чтобы увидеть результат (ну, или закрывать и вновь открывать файл). Правда, любое использование этой надстройки (а может, и любой надстройки - не выяснял) устанавливает в True значение oxls.app.displayalerts. Поэтому, если вам важна настройка displayalerts в процессе создания листов (мне была важна), то либо разберитесь, почему так происходит, либо сделайте, как сделал я - вынес команду присвоения Value в отдельную функцию, которая перед выходом восстанавливает значение displayalerts. Если предложенный финт с переподключением не поможет, то убедитесь, что файл надстройки sumprop.xla лежит в нужной папке: c:\Users\<имя_юзера>\AppData\Roaming\Microsoft\AddIns\ Возможно, кто-то подскажет и другой способ решения этой проблемы (например, что-то подправить в настройках самого Excel) - я не слишком стремился разобраться в деталях, так как приведенный способ меня устроил. |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Попробую, отпишусь. |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
А можно ли как-то обратиться к надстройке , если лежит в другом месте? В моем случае в 'C:\Program Files (x86)\Microsoft Office\Office12\Library\' |
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
У вас команда oxls.app.AddIns("Sumprop").Installed = .F.отрабатывает нормально или выдаёт ошибку (если ошибку, то какую)? |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Строка в таком виде
Ошибка 1426 Но лежит надстройка не в AddIns |
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
А пришлите скрин формы:
Файл -> Параметры -> Надстройки |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Скрин
|
Re: VFP - Exel | |
---|---|
vk65 Сообщений: 402 Дата регистрации: 08.04.2008 |
что за .app. ?
|
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Надо указывать не имя файла настройки, а имя настройки: loExcel.app.AddIns("Сумма прописью").Installed = .F. У меня эти имена совпадали. У меня Microsoft Office 2010 (папка Office14) - в ней oxls не имеет коллекции AddIns, она находится в oxls.app. Исправлено 1 раз(а). Последнее : akvvohinc, 05.06.23 02:04 |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Большое спасибо, друзья, заработало!
Решение такое:
|
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:По-хорошему, надо написать этот код так, чтобы он работал независимо от установленной версии Excel. Например, проверяя наличие APP с помощью PEMSTATUS: oxlsA = IIF(PEMSTATUS(oxls,'app',5),oxls.app,oxls)Ну, или по старинке, используя TYPE(). |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
|
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:У меня oxls.app встречается ещё только в одном месте: oxls.app.displayalerts В общем, по названию app (от application) понятно, что туда вынесены некие глобальные вещи. |
Re: VFP - Exel | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Спасибо!
|
Re: VFP - Exel | |
---|---|
andrewk Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Что-то не догоняю про именно APP. Просто не помню, чтобы на каких-то версиях его видел. Зато есть объект Application: learn.microsoft.com) Куски оттуда: Цитата:Насколько помню свои разборы, чем новее версия офиса, тем большее количество свойств (всякие Visible, ScreenUpdating, DisplayAlerts) дублировалось и можно писать без ".Application". В том числе, смотрю на Excel 2021 (папка Office16), там есть и oXl.Application.AddIns, и oXl.AddIns. Но я о другом. Везде речь идёт именно об ".Application", упоминаний ".app" не вижу |
Re: VFP - Exel | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Разобрался - это моя вина, ввел всех, и себя в том числе, в заблуждение. За давностью лет забыл, что и как когда-то делал. Дело в том, что помимо Excel мы использовали одну стороннюю DLL, которая умеет делать excel-файлы (с некоторыми ограничениями), но на порядок быстрее. А поэтому пришлось сделать класс, работающий и с Excel, и с этой DLL, "скрывающий" разницу между ними. Дальнейшие подробности неинтересны, но в результате объект APP в этом классе просто является синонимом Excel.application. Ну, а при работе с Excel "напрямую", то есть oXls = CREATEOBJECT('excel.application') ссылки oXls и oXls.application равны:
Исправлено 1 раз(а). Последнее : akvvohinc, 13.06.23 16:54 |
© 2000-2024 Fox Club  |