特定の Excel セルから Excel データをインポートするJMP で分析する必要があるデータが、Excel ファイルにやや無計画に保存されている状況があります。幸いなことに、データが含まれている Excel セルのリストを簡単に取得できます。これらの値をインポートする JSL を使用して自動化したいと考えています。これを効果的かつ効率的に行う方法についてのアイデアを探しています。
たとえば、JMP の 1 つの列に必要なデータがこれらの Excel セルに格納されているとします。
E284、E400、E507、D615、E727、D852、E1003、E1114、D1220、D1339、E1493
Open() を使用してワークシートを指定し、開始行、終了行、開始列、終了列を指定して、単一の行/列を持つ JMP ファイルの各値を取得しようとしました。
Open(
"C:\temp\worksheet.xlsx",
Worksheets( "sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 284 ), // get data on row 284
Data Starts on Column( 5 ), // get data on column "E" (the fifth column)
Data Ends on Row( 284 ), // get data on row 284
Data Ends on Column( 5 ), // get data on column "E" (the fifth column)
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( "-" )
)
)
次に、特定のセルから取得する値ごとに個別のデータ ファイルを取得し、個別の JMP ファイル内の値をまとめて 1 つの列の 1 つのデータ テーブルにまとめます。
私が直面している問題の 1 つは、Excel ファイルを開くと、Excel ワークシートの上部にあるすべての空白行が無視されるように見えることです。したがって、行 1 にデータがない限り、行 1 は実際には行 1 ではありません。それは本当ですか?
他のアイデアは役に立ちます。
スクリプティングRe: 特定の Excel セルから Excel データをインポートするExcel で簡単な回避策を見つけました。Excel には、特定のセルから結果を取得するために使用する INDIRECT(cellref) 関数があります。そのため、新しい Excel シートを作成し、データが含まれているシートとセルを示す列を作成し、INDIRECT 関数を使用して、分析に必要な結果のテーブルを取得することができました。
ただし、この問題は、JMP での Excel のインポートに必要ないくつかの改善を浮き彫りにしていると思います。
Re: 特定の Excel セルから Excel データをインポートする以下に例を示します (おそらく XML を解析するためのより良い方法ですが、パターン マッチング関数が役に立ちます。
/*----------------------------------------------------------------------
Method: getWorksheets
----------------------------------------------------------------------*/
getWorksheets = method({username=1},
// this technique (including the overhead of creating the class,
// is >300 x faster than getExcelWorksheets on Mac
// and >100 x faster on Windows
workbook = "xl/workbook.xml";
za = open(_excelFilePath,zip);
contents = za<<READ>>sheet + "\!""
+ " sheetId=\!"" + PatRepeat(PatNotAny("\!"")) + "\!""
+ (" r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"" | " state=\!"hidden\!"" + " r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"")>>x;
ismatch = 1;
lstWorksheets = {};
while(ismatch,
ismatch = patmatch(contents,pat,"");
if (!contains(x,"hidden"),
substituteinto(sheet,"&","&");
if (!contains(lstWorksheets,sheet),
insertinto(lstWorksheets,sheet)
)
)
);
return(lstWorksheets);
),</READ>Re: 特定の Excel セルから Excel データをインポートするそれは興味深い考えです。それが XLSX ファイルの「ボンネットの下」にあるものだとは知りませんでした。
Re: 特定の Excel セルから Excel データをインポートするこれは少し極端なハックですが、同様の手法を使用して PPTX および DOC ファイルを作成しています...
XLSX は、XML ファイルを含む単なる zip ファイルです。XML を使用してセル座標を参照できます。

ZipArchive を使用して XML ファイルにアクセスできます。
Re: 特定の Excel セルから Excel データをインポートする確かに、シートの上部に空のセルがある Excel ワークシートの場合、それらの行は無視されることを思い出しました。見るhttps://www.jmp.com/support/notes/60/026.html
とExcel インポートの改善: インポート プレビューで行番号と列ラベルを表示する
Re: 特定の Excel セルから Excel データをインポートする簡単な答えは「いいえ」です。データの場所を参照する他の方法があれば、私はあなたのアプローチを試してみますが、この場合、Excel セル参照はデータを見つけるための主な方法です。
Re: 特定の Excel セルから Excel データをインポートするExcel セル参照以外のセルを識別するために使用できる情報はありますか。たとえば、フィールド ラベルでしょうか。私は通常、最小限の処理で Excel から JMP にデータを読み込み、行と列を反復処理して重要な情報を検索します。通常、最初のスキャンで関心のあるフィールド ラベルを含む列を特定し、2 回目のスキャンでフィールド値を読み込みます。このようにして、テーブルを作成できるデータのリスト、またはテーブル変数として設定できるヘッダー情報を作成できます。
例 - 特定のフィールド ラベルを含む列を検索するためのスキャン
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
そして、フィールドをスキャンします
fields = [=>];
fields["Description"] = 0;
fields["USL"] = 0;
fields["LSL"] = 0;
fields["Nominal"] = 0;
keys = fields << getKeys;
for (i=1,i<=nitems(keys),i++,
field = keys[i];
success = 0;
for (r=1,r<=nrow(dt),r++,
cell = column(dt,lblCol)[r];
if (contains(cell,field),
success = 1;
fields[field] = r;
break()
)
)
);