問題タブ [dsoframer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio - 別のウィンドウでExcelドキュメントを閉じるDSOFramer。ファイルに保存されていないデータがある場合、dsoframerは「無効なアドレスにアクセスしようとしました」で開くことができません
コントロールを使用Microsoft's DSOFramer
して、ダイアログにExcelファイルを埋め込んで、ユーザーがシートを選択してからセルの範囲を選択できるようにしています。ダイアログのインポートボタンで使用されます。
問題は、DSOFramer's OPEN
関数を呼び出すときに、Excelを別のウィンドウで開いていると、Excelドキュメントが閉じてしまうことです(ただし、Excelは実行されたままになります)。閉じようとしているドキュメントに未保存のデータがある場合、別のウィンドウにExcelドキュメントを閉じるダイアログボックスが表示されます。ファイルに保存されていないデータがある場合dsoframer
、メッセージボックスで開くことができません:Attempt to access invalid address
。
ソースを作成してステップスルーし、そのCDsoDocObject::CreateFromFile
関数で呼び出しBindToObject
を行って、クラスIMonikerのオブジェクトを呼び出しました。HR
です0x8001010a
The message filter indicated that the application is busy
。_ その失敗で、それはMicrosoftExcelワークシートを使用しようとします...これはので失敗InstantiateDocObjectServer
します。は、最初に、を呼び出し、次に(失敗した場合は)を呼び出します。classid
CLSID
HRESULT
0x80040154
Class not registered
InstantiateDocObjectServer
CoCreateInstance
classid
CLSCTX_LOCAL_SERVER
CLSCTX_INPROC_SERVER
DSOFramer
さまざまなダイアログやフォームにOfficeアプリを埋め込むための人気のあるサンプルプロジェクトです。他の誰かがこの問題を抱えていて、私がこれをどのように解決できるかについての洞察を持っているかもしれないことを願っています。開いている他のExcelドキュメントを閉じたくないし、データが保存されていないためにドキュメントを閉じることができない場合にエラーアウトしたくない。
classid
更新1:渡されたものを変更しようとしましたがExcel.Application
(クラスが解決されることはわかっています)、それは機能しませんでした。でCDsoDocObject
、キーを開こうとしますHKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\DocObject
が、失敗します。キーがレジストリに存在しないことを視覚的に確認しました。ガイドにはキーがありますが、DocObject
サブキーはありません。次に、エラーメッセージボックスが生成されますThe associated COM server does not support ActiveX document embedding
。を使用しようとすると、同様の(もちろん異なるキー)結果が得られますExcel.Workbook programid
。
更新2:問題のあるExcelインスタンスではなく、自動化が(最後に呼び出された)Excelにバインドされることを期待して、Excelの2番目のインスタンスを起動しようとしましたが、そうはならなかったようです。結果は同じでした。私の問題は、要約すると次のようになります。BindToObject
クラスのオブジェクトでを呼び出し、IMoniker
を受信してい0x8001010A (RPC_E_SERVERCALL_RETRYLATER)
The message filter indicated that the application is busy
ます。BindToObject
(を介して)に渡されたフラグで遊んでみましたSetBindOptions
が、何も違いがないようです。
更新3:最初にIMonikerクラスを使用してバインドを試みます。それが失敗した場合は、メソッドCoCreateInstance
としてを呼び出します。これは他のMSOfficeオブジェクトでも機能する可能性がありますが、Excelの場合、クラスはワークシート用です。サンプルをに変更してから、ワークブックを取得し、ターゲットファイルに対してを呼び出しました。これにより、ワークシートオブジェクトが返されます。次に、そのポインターを返し、元のサンプルコードパスにマージして戻しました。すべてが現在機能しています。clsid
fallback
CoCreateInstance _Application
Workbooks::Open
excel - Excel の範囲 (IRange) で Select を呼び出すと、0x800a03ec になります。ワークシートの使用範囲から範囲が返されました
「使用範囲」を選択しようとしています。ワークシートの UsedRange を取得し、その上で Select 関数を呼び出します。select 呼び出しで HRESULT 0x800a03ec を受け取ります。
コードは次のとおりです。
COleVariant の結果。
HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, irange, L"Select", 0);
AutoWrap 関数のコードをわざわざ投稿するつもりはありません (誰かが尋ねない限り)。それはかなり有名で、私はそれを変更していません。
私は irange が良いことを確信しています。なぜなら、私が期待したものを持っていることを確認するためにいくつかの呼び出しを試みたからです。それを繰り返し処理すると、各セルの内容を確認できます (そしてそれは正しいです)。返される行と列の数は正しく、返される "Address" プロパティはチェックアウトされます。
ワークシートはロックされていません。
Locale に関係する他の問題が投稿されているのを見たことがあります。私のシステムは、ユーザー アカウントと同様に米国英語に設定されています。どちらも変更されていません。
誰かが助けてくれることを願っています!
更新:私も試しました
これは S_OK を返しますが、範囲は選択しません。通常、iRange 構造体の関数を直接呼び出すことはできません。結果は gpf またはアクセス違反です。そのため、autowrap 関数を使用する必要があります (Invoke 呼び出しを実行するため)。この呼び出しが機能しないことに驚きはありません。
ロックされた場合に備えて、Excel ファイルを非読み取り専用モードで開いてみました。これで問題は解決しませんでした。範囲から 1 つの項目 (セル) を取得し、その Select を呼び出すことで個々のセルを選択できますが、範囲を選択することはできません。
excel - エクセルの自動化。範囲から複数のアイテムを選択する必要があります
範囲内の単一のアイテムを選択できるコードがあります。
これはうまくいきます。ただし、範囲内のすべてのセルを選択する必要がありますが、Item プロパティの "get" 呼び出しでこれを指定する方法を見つけることができませんでした。-1、-1 を使用してみました... コロンで区切られた列の範囲と行の範囲を指定して、2 つのバリアントで bstr のペアを渡そうとしました。また、範囲指定の文字列の単一パラメーターを渡そうとしました。どれも機能しませんでした。
更新:私も試しました
これは S_OK を返しますが、範囲は選択しません。通常、iRange 構造体の関数を直接呼び出すことはできません。結果は gpf またはアクセス違反です。そのため、autowrap 関数を使用する必要があります (Invoke 呼び出しを実行するため)。この呼び出しが機能しないことに驚きはありません。これが機能することを願っています....これは、このプロジェクトの最後の部分です。
vb6 - Vb 6.0 で Dso Framer コントロールのアクティブなドキュメントを右クリックしているときに、MS Word のポップアップ メニューを非表示または無効にする
Microsoft DSO Framer Control を使用して、Word 文書を Visual Basic フォームで表示しています。
DSO Framer コントロールで Word ドキュメントをホスト (開く) した後。
Word ドキュメントを右クリックすると、MS word コンテキスト メニューが表示されます。
このポップアップ メニューを非表示にします。
この問題で私を助けてくれる人はいますか?
解決策を待っています。
c# - DSOFRAMER と 64bit
dsoframerを使用して、Excel を .Net アプリに埋め込んでいます。小さなクイックはさておき、それはうまく機能します。ただし、64ビットマシンでは動作しないようです。
これで運が良かった人はいますか?多分相互運用/ソースを再コンパイルしますか? dsoframer は C++ ActiveX コントロールであるため、これは理にかなっています...誰かが既に作業を行っているのか、それとも何か不足しているのか疑問に思っています。
dsoframer - MS KB311765 と DsoFramer が MS サイトにありません
DsoFramer を入手しようとしたところ、そのダウンロード ページとKB 記事が見つからないことがわかりました。私は cnet.com から DsoFramer をダウンロードしましたが、まだ興味があります: なぜ削除されたのでしょうか。
c# - ファイルを開かないようにする
Winforms で docx ファイルを開くために dsoFramer を使用しています。dsoframer で docx ファイルを開き、ユーザーが Windows エクスプローラーから同じドキュメントを開くと、アプリケーションが不安定になります。ファイルが dsoFramer で開かれているときに、Windows エクスプローラーからファイルを開かないようにするにはどうすればよいですか。
よろしくお願いします。
64-bit - DSOFramer.ocx 64 ビット Windows フォームでの Word ドキュメントのホスティング
こちらで説明されているように、DSOFramer.ocx コンポーネントは MSDN からダウンロードできなくなったようです。また、DSOFramer コンポーネントは 32 ビット コンポーネントです。これを考えると、私は2つの質問があります:
- DSOFramer.ocx コンポーネントを使用する以外に、Windows フォームで Word 文書をホストするための代替手段はありますか?
- Windows 64 ビット オペレーティング システムに移行し、Windows フォームをネイティブの 64 ビット プロセスとして実行する場合、Word 文書を 64 ビット プロセスでホストするにはどうすればよいですか?
excel - DsoFramer は実行中の Excel インスタンスを無効にします
DsoFramer コントロールを使用して、アプリケーション内で Excel ドキュメントを表示しています。問題は次のとおりです。アプリケーションを起動する前に Excel 2007 をスタンドアロン アプリケーションとして実行している場合、私のアプリケーションを起動してその中で Excel ドキュメントを開くと、スタンドアロンの Excel にアクセスできなくなります (alt + tab キーを押して移動することはできません)。私のアプリケーションは Excel ドキュメントを表示します。これは回避できますか?