Нужен элемент управления ActiveX для встраивания Excel в диалог - PullRequest
5 голосов
/ 22 октября 2008

Я создаю функцию «Импорт из Excel». Это должно быть в DLL, вызванной из приложения не MFC. Должен предоставить изображение электронной таблицы, которую пользователи могут перетащить в поле выбора (для выбора ячеек), затем нажать кнопку «ИМПОРТ», и все будет правильно. Возникли проблемы с получением электронной таблицы, наличием рядом с ней кнопки и наличием ее в DLL.

Я пошел по пути диалога MFC внутри DLL, но был заблокирован при попытке вызвать OLE-клиент для Excel в окне диалога. Только поддержка, которую я нашел для отображения Excel с использованием OLE, требовала SDI. Мне удалось заставить функции автоматизации работать, и я мог читать ячейки и рисовать их «фальшивое изображение» в своем диалоге ... но я боюсь, что это не будет соответствовать моим требованиям.

Итак, я попытался создать SDI. Мне удалось создать SDI, который вывел Excel в качестве клиента OLE. Я смог обработать событие «изменение выбора» и перейти к нужным мне данным ячейки. На этом этапе меня сорвали 2 предмета:

  1. Не удалось заставить этот SDI работать в MFC DLL. Сбой в конструкторе CWinApp, утверждая, что AfxGetThread не был нулевым. Перемещено «theApp» для локальной области видимости в пределах одной экспортированной функции DLL, но все еще не удается заставить его работать, но с другими симптомами: сбой при добавлении AFX_MANAGE_STATE (AfxGetStaticModuleState ()); в экспортированную функцию DLL, если я не использовал это, OnInitInstance никогда не был введен. Попытался добавить вызов в функцию Run () приложения, но это не помогло. Я могу опубликовать этот код, если кто-то думает, что он знает, в чем проблема.

  2. Не удалось отобразить панель инструментов, когда элемент клиента Excel был активен. Я мог бы поместить свой «импорт» (и другие параметры) в верхнюю часть меню, но этого недостаточно. Даже плавающая панель инструментов была закрыта. Имеет смысл сделать это, поскольку было бы странно иметь панель инструментов, которая не могла выполнять действия с текущим активным элементом ... но в моем случае это проблема.

Так что теперь я думаю, что мне нужно вернуться к диалоговому подходу и встроить элемент управления ActiveX, который вызывает файл таблицы Excel для импорта.

Должен либо позволить мне обрабатывать событие изменения выбора, либо должен позволять мне находить, какие ячейки выделены (или были выбраны последним, если нажатие кнопки «импорт» в моем диалоговом окне приводит к тому, что выбранные ячейки становятся невыбранными).

Он также должен иметь разумные условия лицензирования, поскольку он будет использоваться в коммерческом приложении, которое является общедоступным.

Если кто-нибудь знает «быстрое решение» для любого из подходов, которые я пробовал, это тоже было бы полезно.

Надеюсь, кто-нибудь может мне помочь!

1 Ответ

0 голосов
/ 23 октября 2008

Если вы просто хотите встроить Excel, вам ничего не нужно.

Просто вставьте его в стандартный управляющий узел OCX.

...