スクリプトで Excel インポート ウィザードをバイパスするアプリケーション ウィンドウの [OK] ボタンが押されたときに、JMP アプリケーション内から .xslx ファイルを開こうとしています。 私の問題は、Excel ウィザード ウィンドウをバイパスして直接開くのが難しいことです。
Open() ステートメントで指定した Excel オプションを使用して、ファイルを JMP で開く必要があります。 Open() ステートメントのオプションを正しくするために、ファイルを手動で開き、テーブルのソース スクリプトから Open() ステートメントをコピーしたので、これらのオプションはすべて正しいと思います。 これはマルチワークシートの Excel ファイルであり、JMP で必要なワークシートは 1 つだけなので、Open() の状態は次のようになります。
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
奇妙なことに、この open ステートメントを独立したスクリプトで実行すると、すべて思いどおりに実行されます。Excel ウィザード ウィンドウがポップアップすることなく、ファイルが直接開きます。
ただし、作成中の JMP アプリケーションのスクリプトの一部として同じ Open() ステートメントを含めると、ウィザード ペインが開くのを止めることができないようです。 (アプリケーションのユーザー入力ウィンドウの [OK] ボタンをクリックすると、Open() ステートメントが呼び出されます。)
なぜこれが起こっているのか、それを止める方法はありますか?
Re: スクリプトで Excel インポート ウィザードをバイパスする@mjoner - はい、この回避策は少なくとも JMP 16.0 まで必要です。
Re: スクリプトで Excel インポート ウィザードをバイパスする@danschikoreここで参照されている手順は、これを達成するための唯一の方法ですか? 目的のスクリプト動作を実現するために、このクラッジに書き込む必要をなくすという考えはありますか?
Re: スクリプトで Excel インポート ウィザードをバイパスするダン、
このフォローアップをありがとう。 私は最終的に他のすべてを試し、最終的に使用しました@MS Include() ファイル内に open ステートメントを埋め込む 's ソリューション。 これは何が起こっているのかを説明し、別の回避策を提供します。
ジョンRe: スクリプトで Excel インポート ウィザードをバイパスするWindows と Mac では動作が異なることがわかりました。これは、Excel ファイルの読み取りをサポートするライブラリの違いによるものと思われます。Mac では、直接呼び出された Open() スクリプトは期待どおりにファイルを開きますが、ボタンのクリックから呼び出された Open() 呼び出しは Excel ウィザードを表示します。
その回避策は@MS指定すると、JMP は強制的に「バッチ」モードになり、スクリプトがボタン経由ではなく直接実行されたかのように動作するようにロジックが変更されます。中間ファイルを必要としない別の方法は、スクリプトを ScriptBox に埋め込み、そのボックスで <
// One way to force JMP into batch mode is to embed the script in a ScriptBox
// and invoke <<RUN on="" the="" script="" box.="" new="" window=""></RUN>
Re: スクリプトで Excel インポート ウィザードをバイパスするダン、応答してくれてありがとう。 これを試して、問題の原因となっているアプリケーションを個別にお送りします。 少しください。 ジョンRe: スクリプトで Excel インポート ウィザードをバイパスする添付の JMP アプリケーションを使用して、JMP 13/14/15 でこの問題を再現しようとしました。ボタンを押すスクリプトを以下に示します。これまでに試したすべてのバージョンでテーブルが正しく開きます。この例はあなたに当てはまりますか?これは、開発中のアプリケーションとどのように異なりますか? また、使用している JMP のバージョンは何ですか?
Button1Press = Function( {this},
// This function is called when the button is pressed
Open(
"$SAMPLE_IMPORT_DATA\VA Lung Cancer.xls",
Worksheets( "VA Lung Cancer" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
Re: スクリプトで Excel インポート ウィザードをバイパスするありがとう、さん。これは将来役に立ちます。 それまでの間、状況に応じた別の回避策を見つけましたが、これは次回のツールボックスに入れておくとよいでしょう。
スクリプト ガイド (p. 333) には、Open() 関数のコンテキスト依存性について説明し、それを Excel ウィザードに関連付けるセクションがありますが、それほど明確ではありません。 ここで説明されている動作は、Open() の実装の欠点 (? バグ) であるか、さらにドキュメントが必要であると思わずにはいられません。
たとえば、素晴らしいことの 1 つは、設定をキーオフする代わりに、ウィザードを使用しないかどうかの Open() の明示的なオプションです。 ちょうど私の2セント。
Re: スクリプトで Excel インポート ウィザードをバイパスする私もこれを経験し、1つの回避策を見つけました。 を助けて開ける()コマンドを別のスクリプトとして使用し、含む()コードを実行します。
// Create a jsl file with the Open() command
f = Save Text File(
"~/Desktop/test.jsl",
Char(
Name Expr(
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
)
)
);
// Invoke Open() via user input
nw = New Window( "open test", Button Box( "OK", Include( f ) ) );Re: スクリプトで Excel インポート ウィザードをバイパスするこれに困惑している人のために、別の方法を紹介します。1. ExcelのOpenメソッドのユーザー設定を取得して保存します。2. 必要なものに変更します。3. ファイルを開きます。4. 設定を元に戻します。
例えば
originalPref = 設定を取得します(Excel Open メソッド);
設定(Excel Open メソッド("すべてのシートを開く"))
myPath = ファイルを選択(...など
dt = Open(myPath...)
評価(元の設定)
Re: スクリプトで Excel インポート ウィザードをバイパスする私の Mac 上の JMP 17.2 でもこの問題がまだ発生しており、Excel シートを開くコードには、ユーザーが値を入力する必要がある変数があります。