5

「Excelからのインポート」機能を構築しています。MFC 以外のアプリから呼び出される DLL 内にある必要があります。ユーザーが選択ボックスをドラッグして (セルを選択するために) スプレッドシートの画像を提供し、[インポート] ボタンをクリックすると、適切な処理が行われる必要があります。スプレッドシートの起動に問題があり、ボタンが隣接していて、DLL で発生する。

DLL 内で MFC ダイアログのルートをたどりましたが、ダイアログのウィンドウで Excel 用の OLE クライアントを起動しようとしてブロックされました。OLE を使用して Excel を表示するために見つけたサポートのみが SDI を必要としていました。自動化機能を機能させることができ、セルを読み取って、ダイアログにそれらの「偽の画像」を描画することができました...しかし、それは私の要件に準拠していないのではないかと心配しています.

ということで、SDIを作成してみました。Excel を OLE クライアントとして起動する SDI を作成できました。「選択変更」イベントを処理し、必要なセル データに移動できました。この時点で私は2つのアイテムに失敗しました:

  1. この SDI を MFC DLL で機能させることができませんでした。AfxGetThread が null ではないと主張して、CWinApp コンストラクターでクラッシュします。「theApp」を、エクスポートされた 1 つの DLL 関数内でローカルにスコープされるように移動しましたが、それでも機能させることはできませんでしたが、別の症状でした: AFX_MANAGE_STATE(AfxGetStaticModuleState( )); DLL 関数をエクスポートするには、それを使用しないと、OnInitInstance が入力されませんでした。アプリの Run() 関数への呼び出しを追加しようとしましたが、役に立ちませんでした。問題が何であるかを誰かが理解していると思われる場合は、このコードを投稿できます。

  2. Excel クライアント アイテムがアクティブな間、ツールバーを表示できませんでした。上部のメニューバーに「インポート」(およびその他のオプション) を配置することもできますが、それでは十分ではありません。フローティング ツールバーも閉じられました。現在アクティブなアイテムに対してアクションを実行できないツールバーが存在すると混乱するため、これを行うことは理にかなっています...しかし、私の場合、それは問題です.

そこで、ダイアログ アプローチに戻り、インポートする Excel スプレッドシート ファイルを表示する ActiveX コントロールを埋め込む必要があると考えています。

選択変更イベントを処理できるようにするか、選択されているセルを見つけられるようにする必要があります (または、ダイアログの [インポート] ボタンをクリックして選択したセルが選択解除される場合は、最近選択されたセルを見つけられるようにする必要があります)。

また、これは広く一般に公開されている商用アプリケーションで使用されるため、合理的なライセンス条件が付属している必要があります。

私が試していたアプローチのいずれかに対する「クイックフィックス」を誰かが知っていれば、それも役に立ちます。

誰かが私を助けてくれることを願っています!

4

1 に答える 1

0

Excel を埋め込むだけの場合は、何も必要ありません。

標準の OCX ホスト コントロールに埋め込むだけです。

于 2008-10-23T13:25:52.203 に答える