Excel и OleContainer

Доброго времени суток.
Вопрос не совсем по террасофту, но в моем случае с ним связан.
Собственно, собрал простенькую Actve Form на Delphi, на ней OleContainer.
Вставляю в террасофтный ActiveXControl и создаю OleObject из файла Екселя (OleContainer.CreateObjectFromFile). В результате в OleContainer создается объект Excel.Sheet.12. И все бы хорошо, но я не могу сохранить изменения, ну и в принципе выполнить команду из главного меню(хотя у нужного CommandBar и его элементов управления Enabled = true).
Перерыл много интернетов, но не нашел ответа.
Возможно, кто-то сталкивался с подобным.
Заранее спасибо за ответ.

Нравится

6 комментариев

А какая цель ставилась? Если просто работа с Екселем в Террасофте, то можно посмотреть здесь, как обходной вариант.

Попробовал.
Да, действительно лист екселя виден, но не видно управляющих элементов, а свойство ActiveXControl.ActiveXObject.Document.CommandBars == null... я что-то делаю не так?

Странно. Когда я через навигейт делал - у меня все менюшки были доступны. Может протестируйте на другом компьютере с "чистым" офисом.

"Славянский Евгений" написал:После выполнения Navigate получаете доступ к объекту ActiveXControl.ActiveXObject.Document (можете установить видимость панелей для MS Word, подписаться на события и многое другое)

Записала макросом отображение панели "Защита"
Application.CommandBars("Protection").Visible = True. Таким образом после Navigate, попробуйте показать нужные панели.

Сам Document у меня типа _WorkBook у него CommandBars == null.
Если командую Document.Application.CommandBars('Protection').Visible = true, то он и стает true, но визуально никаких изменений. висит один лист и все.

К слову, вот у меня в файле используется сводная таблица, toolbar со списком полей не вижу. Нажимаю в самом екселе "показать список полей" - ничего не происходит, если программно включаю Document.ToolBars(2).Visible = true - то же самое.

Попробуйте создать кнопочку на окне с контейнером и на обработчике написать

Document.Application.CommandBars('Protection').Visible = true

У меня были проблемы именно с тем, в какое время инициализировать панели. Получается инициализировать только после того как отработал метод Prepare() окна с ActiveX контейнером.

Показать все комментарии