問題タブ [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.

0 投票する
3 に答える
5434 参照

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します。は、最初に、を呼び出し、次に(失敗した場合は)を呼び出します。classidCLSIDHRESULT0x80040154 Class not registeredInstantiateDocObjectServerCoCreateInstanceclassidCLSCTX_LOCAL_SERVERCLSCTX_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の場合、クラスはワークシート用です。サンプルをに変更してから、ワークブックを取得し、ターゲットファイルに対してを呼び出しました。これにより、ワークシートオブジェクトが返されます。次に、そのポインターを返し、元のサンプルコードパスにマージして戻しました。すべてが現在機能しています。clsidfallbackCoCreateInstance _ApplicationWorkbooks::Open

0 投票する
1 に答える
3470 参照

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 を呼び出すことで個々のセルを選択できますが、範囲を選択することはできません。

0 投票する
2 に答える
1767 参照

excel - エクセルの自動化。範囲から複数のアイテムを選択する必要があります

範囲内の単一のアイテムを選択できるコードがあります。

これはうまくいきます。ただし、範囲内のすべてのセルを選択する必要がありますが、Item プロパティの "get" 呼び出しでこれを指定する方法を見つけることができませんでした。-1、-1 を使用してみました... コロンで区切られた列の範囲と行の範囲を指定して、2 つのバリアントで bstr のペアを渡そうとしました。また、範囲指定の文字列の単一パラメーターを渡そうとしました。どれも機能しませんでした。

更新:私も試しました

これは S_OK を返しますが、範囲は選択しません。通常、iRange 構造体の関数を直接呼び出すことはできません。結果は gpf またはアクセス違反です。そのため、autowrap 関数を使用する必要があります (Invoke 呼び出しを実行するため)。この呼び出しが機能しないことに驚きはありません。これが機能することを願っています....これは、このプロジェクトの最後の部分です。

0 投票する
1 に答える
1564 参照

vb6 - Vb 6.0 で Dso Framer コントロールのアクティブなドキュメントを右クリックしているときに、MS Word のポップアップ メニューを非表示または無効にする

Microsoft DSO Framer Control を使用して、Word 文書を Visual Basic フォームで表示しています。

DSO Framer コントロールで Word ドキュメントをホスト (開く) した後。

Word ドキュメントを右クリックすると、MS word コンテキスト メニューが表示されます。

このポップアップ メニューを非表示にします。

この問題で私を助けてくれる人はいますか?

解決策を待っています。

0 投票する
0 に答える
1121 参照

c# - DSOFRAMER と 64bit

dsoframerを使用して、Excel を .Net アプリに埋め込んでいます。小さなクイックはさておき、それはうまく機能します。ただし、64ビットマシンでは動作しないようです。

これで運が良かった人はいますか?多分相互運用/ソースを再コンパイルしますか? dsoframer は C++ ActiveX コントロールであるため、これは理にかなっています...誰かが既に作業を行っているのか、それとも何か不足しているのか疑問に思っています。

0 投票する
3 に答える
13254 参照

dsoframer - MS KB311765 と DsoFramer が MS サイトにありません

DsoFramer を入手しようとしたところ、そのダウンロード ページKB 記事が見つからないことがわかりました。私は cnet.com から DsoFramer をダウンロードしましたが、まだ興味があります: なぜ削除されたのでしょうか。

0 投票する
1 に答える
490 参照

c# - ファイルを開かないようにする

Winforms で docx ファイルを開くために dsoFramer を使用しています。dsoframer で docx ファイルを開き、ユーザーが Windows エクスプローラーから同じドキュメントを開くと、アプリケーションが不安定になります。ファイルが dsoFramer で開かれているときに、Windows エクスプローラーからファイルを開かないようにするにはどうすればよいですか。

よろしくお願いします。

0 投票する
1 に答える
3325 参照

64-bit - DSOFramer.ocx 64 ビット Windows フォームでの Word ドキュメントのホスティング

こちらで説明されているように、DSOFramer.ocx コンポーネントは MSDN からダウンロードできなくなったようです。また、DSOFramer コンポーネントは 32 ビット コンポーネントです。これを考えると、私は2つの質問があります:

  1. DSOFramer.ocx コンポーネントを使用する以外に、Windows フォームで Word 文書をホストするための代替手段はありますか?
  2. Windows 64 ビット オペレーティング システムに移行し、Windows フォームをネイティブの 64 ビット プロセスとして実行する場合、Word 文書を 64 ビット プロセスでホストするにはどうすればよいですか?
0 投票する
1 に答える
769 参照

excel - DsoFramer は実行中の Excel インスタンスを無効にします

DsoFramer コントロールを使用して、アプリケーション内で Excel ドキュメントを表示しています。問題は次のとおりです。アプリケーションを起動する前に Excel 2007 をスタンドアロン アプリケーションとして実行している場合、私のアプリケーションを起動してその中で Excel ドキュメントを開くと、スタンドアロンの Excel にアクセスできなくなります (alt + tab キーを押して移動することはできません)。私のアプリケーションは Excel ドキュメントを表示します。これは回避できますか?