問題タブ [xll]
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.
c++ - Excel SDKを使用してC ++でコーディングされたExcel関数:Excelの関数ウィザードで使用したときに計算をトリガーしないようにしたい
Excel c/c++ sdk >= 2007 (参照用に 2007 のリンクを掲載) および Excel >= 2007を使用しています。関数 F を優れたものにするために提供するxll を (sdk を使用して) コーディングしましたが、この関数 F はExcelシートで2つの方法で呼び出すことができます:1)Excelセル/セル範囲または数式バーにFを含む数式を直接書き込みます2) Excelセルに書き込み=F
、数式の左側にあるfxアイコンをクリックしますbar と Excel の関数ウィザードを使用します。
私が興味を持っているのは2番目のケースだけです。この場合、これは Excel の関数ウィザードのダイアログ ボックスを開きます: n 個のセルを含むウィンドウで、それぞれが F の 1 つの引数に対応します (F が n 個の引数をとる関数であると仮定します)。デフォルトでは、セルの 1 つに何かを入力すると、Excel は関数の再計算をトリガーします。
これは、関数を知らず、「それを発見」したい場合に特に便利です。入力したものが F などの正しい引数を表しているかどうかを確認できるためです。たとえば、エラーが表示されるなどです。
しかし、F が (C++ で) 非常に集約的な数値ルーチンに依存している場合、すべての再計算に時間がかかりすぎて、ウィザードがフリーズします。(ダイアログ ボックス内のセルが変更されるたびに、再計算がトリガーされるため)。
したがって、私は次のことをしたいと思います:関数ウィザードを介して関数が「呼び出された」ときに、何らかの方法で再計算を無効にします。これは、低品質のソリューションとしましょう。
理想的には、私は次のことをしたいと思います: トリガーされる再計算を自動化しますが、ウィザードが呼び出されるスレッドとは別の「スレッド」で (C++ Excel SDK コードで) 実行されるようにします。これ以上凍結しないように。(ウィザードの便利な部分を保存できるようにするためです。)どうやら、このmsdnの記事を正しく理解していれば(同じ問題ではない場合はそうではないかもしれません)、Excel 2007では不可能ですが、Excelでは可能です> = 2010年。
F のユーザーはさまざまなバージョンの Excel を使用しているため (主に 2007 年ですが、中には 2003 年のものもあります)、たとえ私が 2010 年に移行したいと思ったとしても (さあ、実生活ではすでに 2013 年になっています! )、前述の理由により、私はそれをしませんが、一部のExcelバージョンでのみ機能するものがあるのは満足できないためです...
そこで、別の解決策を見つけたいと思います。これについて RTD について話している人がいると聞きましたが、よくわかりません。
そのため、洞察は大歓迎です。かなり前にthx。(そして質問が長くなってすみません。)
c++ - c++ dllから直接XLOPER(Excel変数)をVBAに返す方法は?
VBA で XLOPER 型変数を処理する方法がわかりません。Xloper 変数、c++ DLL 、およびXLL アドインの関係を説明する Web ページはたくさんありますが、XLL フレームワークを使用せずに xloper を直接 VBA に返す dll に c++ 関数を記述する必要があります。(dll の関数は Excel ユーザーではなく VBA コードによって呼び出されるため、ユーザー定義関数は必要ありません)。
実際、私は Excel VSTO をコーディングしており、そこから C++ コードを呼び出す必要があります。xloper 変数は XLL に非常に役立つことがわかったので、この変数タイプを VBA/VB.Net で直接使用したいと考えています。それで、それは可能ですか?
- xloper はバリアント型を使用して処理できると思いますが、方法がわかりません。この投稿を見つけました: XLOPER と VARIANT の間でどのようにマーシャリングできますか? しかし、明確な答えはありません。
編集 :
わかりにくかったらすみません。たとえば、この C++ 関数を作成して、Excel から Int を受け取り、Excel への xloper variale として同じ値に 5 を加えた値を返します。
しかし、vba でそれを呼び出す方法がわかりません。戻り変数は VARIANT ですか?
batch-file - Bat または vbScript を使用して Excel を開いているときに XLL を登録および登録解除する
次のことを行うために短い .bat スクリプトまたは .vbscript を作成できる良い方法があるかどうか疑問に思っています。
Excel が開いている間に、xll の登録を解除します。
指定したフォルダーから展開フォルダーに xll を取得し、現在の XLL を置き換えます
新しい xll を Excel アドインとして登録します。
このようなスクリプトが必要な理由は、コードをコンパイルするたびに新しい xll を取得し、開いているすべての Excel ワークブックを手動で保存し、Excel をシャットダウンし、置き換え後に Excel を再度開くと、非常に面倒になるからです。ファイル。
私の現在のセットアップは、作業しているマシンに応じて、Windows XP/7 上の Excel 2010 です。
ありがとう!
c# - ExcelDna は Excel UI 要素を取得します
DNA ファイル内で作成された UI 要素にアクセスできないように見えるため、DNA ファイルから UI 要素を取得するにはどうすればよいですか? エクセルDNAを使っています
また :
私がやりたいのは、特定のセルに対して次の N 個のセルの値を取得したいのですが、セルの値を取得するたびに 0x800A03EC というエラーが発生します。現在のセルとは異なる値を取得するにはどうすればよいですか?
excel - xlfEvaluate での XLL の問題
VS2012 を使用して、XLL で記述された非常に単純な関数でこの問題が発生しました。MSDN と Steve Dalton の本を読んでみましたが、何が間違っているのかわかりません。注意が必要なのは、関数が呼び出されたセル以外のワークシート セルの値を読み取る関数が必要なことです。この関数は引数をとらず、整数を返します。私はそれをJ#として宣言しました(#は、ダルトンのアドバイスに従ってXLM機能を呼び出すことができることを示しています...ただし、#がなくても同じ問題が発生します)。スペースを節約するために関数の宣言を含めていませんが、単純であり、問題の原因ではないと思います。
この最初のコード ブロックは問題なく動作します。自信をつけるために書きました。
しかし、この 2 番目のブロックは機能しません。理由がわかりません。関数が呼び出されたセルとは異なるセルから値を読み取ろうとしています。私が得たのは、エラー (xltypeErr) と val.num フィールド (ワークシートのセルには整数値が含まれています) のジャンク値を含む戻り XLOPER12 です。
何がうまくいかないのか、親切に説明していただけますか?
python - xll 関数 python の呼び出し
こんにちは、Python を使用して xll アドインの関数を呼び出そうとしています。アドインをロードし、引数がオプションである関数を呼び出す必要があるポイントまで、すべてが正常に実行されるため、空白のままにしておくことができ、エラーが発生します。つまり、Excelではfunction1
、セルに入力すると正常に動作します
しかし、Pythonで私が書いた場合:
次の行は機能しません。
誰かがこの種の状況の解決策を持っていますか?
c# - XLL が UDF より遅いのはなぜですか?
XLL を使用してマクロを高速化しようとしてきましたが、XLL よりも UDF の方がはるかに高速です。
コード プロファイリングを含む一部のデータがそれを示しています
サブ Proc:module 1 反復のXLL時間11.64831 秒
サブ Proc:module 1 反復のUDF時間4.25986 秒
これは、変換した 2 つの UDF で発生し、ファクターは約 2 倍または 3 倍遅くなります。たとえば、このための XLL 関数は次のとおりです。
UDF関数は
両方とも、データとセル間の空白を使用して Range(A1:A701) に対してテストされました。どちらも期待どおりに機能しますが、XLL の方が遅いだけです。
c++ - 同じアドインを添付しますが、Excel の起動時に異なるフォルダーから
C++ で記述された Excel アドイン XLL があります。たとえば、abc.xll という名前です。
私がやりたいのは、小さなバッチ スクリプトを作成して、"Prod" パラメーターで開始するように呼び出すと、C:\xllProduction\abc.xll フォルダーにある xll アドインを使用して Excel が起動し、起動時に開始することです。 「Dev」パラメーターを使用すると、C:\xllDev\abc.xll フォルダーで Excel xll が起動されます。
.bat ファイルで set local を使用して、環境変数を特定のセッションでのみ有効にすることができます。また、start Excel を使用して Excel を起動することもできますが、特定の xll で開始する方法がわかりません。
それが役立つ場合、私はExcel 2010を使用しています。
ありがとう!