Excelインターフェイス
概要と主要な概念
Excelインターフェイスは、2つ以上のワークブックから複数のワークシートを非常にすばやく簡単にインポートおよびエクスポートできるように設計されました。独自のカスタムインポート/エクスポートコードを作成することもできます。
Excelインターフェイスには、ツールボックスからアクセスできます。
Excelインポート
Excelインポーターは、テーブルサイズやセルデータタイプに関する多くのインポート処理を自動化できます。Excelインポーターを使用して実装をさらに自動化すると、時間の経過に応じて変化するデータをインポートする際に非常に役立ちます。
Excelエクスポート
Excelエクスポーターを使用すると、複数のテーブルを複数の異なるExcelワークブックにエクスポートできます。このページのコントロールと機能は、Excelインポーターページと同じです。このページの詳細については、上を参照してください。
カスタムインポート/エクスポート
カスタムインポート/エクスポートページでは、独自のカスタムコードを作成して、Excelワークブックにインポートおよびエクスポートできます。ピックリストには、Excelからインポートおよびエクスポートする際のサンプルコードがあります。
[インポート]タブ
[インポート]タブには、次のプロパティがあります。
インポート行(リスト)
Excelインポーターのインポート行がすべて表示されます。[追加]ボタンと[重複]ボタンを使用して、行を追加できます。また、同じExcelワークブックからインポートしたインポート行を並べ替えてグループ化することもできます(これにより、同じワークブックを切り替えるのに比べて大幅にスピードが向上します)。
テーブルをインポート
Excelインポーターは、インポート行ウィンドウのチェックボックスがオンになっている各行に(上から)順に移動し、右側に指定されたプロパティに基づいてインポートを実行します。
Excelワークブック
[Excelワークブック]では、インポートする情報が含まれているExcelワークブックファイルの名前を定義します。この列に情報を入力する方法は4つあります。
- 不明なワークブック名または場所("NEW") - 使用するワークブックの名前や場所が不明な場合や、時間の経過に応じて変化する場合は、"NEW"オプションを選択できます。このフィールドで"NEW"を使用すると、参照ウィンドウが開き、インポートを実行する際に使用するExcelファイルを検索するように求められます。これは、入力データが実行やユーザーによって異なる場合に非常に役立つオプションです。
- 以前の場所と同じ(空白) - 前のインポート行と同じワークブックを引き続き使用する場合は、このフィールドを空白のままにします。これは、同じワークブック内の複数のシートから情報をインポートする場合に推奨されるオプションです。同じワークブックを使用するインポートをグループ化するには、ウィンドウの左側にある矢印を使用してインポート行の順序を変更できます。
- 絶対パス(ABSOLUTE) - モデルを使用する際にワークブックの場所や名前を変更しない場合は、Excelワークブックの絶対パスを入力できますたとえば
C:\tempdirectory\myfile.xls
のように入力します。ファイルが見つからない場合は、インポートが停止し、そのファイルをスキップするか、インポートするファイルを手動で選択するオプションがあります。 - 相対パス(RELATIVE) - Excelファイルがモデルと同じディレクトリまたはサブディレクトリにある場合は、Excelファイルの相対パスを入力できます。または、ファイルを参照するとそのファイルへの相対パスが入力されます。FlexSimのインストールディレクトリに相対パスを入力することもできますたとえば
userprojects\myproject\myfile.xls
のように入力します。ファイルが見つからない場合は、インポートが停止し、そのファイルをスキップするか、インポートするファイルを手動で選択するオプションがあります。
Excelシート名
インポート情報を含むExcelシートの名前たとえばSheet1
のように入力します。Excelインポーターは、ワークブックに存在しないか、間違って入力されたためにシート名が見つからない場合、インポートを一時停止し、ユーザーに問題を警告します。ユーザーは、インポートを完全に終了するか、問題のあるインポート行をスキップして次の行に進むかを選択できます。
テーブルデータ
または を使用して、インポートされたデータを受け取るFlexSimのテーブルを選択します。または、ソフトウェア全体にある ボタンを使用して自動でテーブルを選択します。
データプレビュー
FlexSimの現在のテーブルデータのプレビューが表示されます。テーブルエディタでデータを開くには、[...]ボタンをクリックします。
ヘッダー
ヘッダーを実装すると、Excelインポーターはテーブルの列名や行名をインポートします。これは、後でFlexSimで列と行を識別する際に役立ちます。ヘッダー情報の行や列は自動で計算されます。ヘッダー情報は、常にデータ区別情報や実際のデータの前に置く必要があります。
開始行と開始列
[開始行]フィールドと[開始列]フィールドは、Excelインポーターがインポートする必要があるデータをExcelシート上で探す場所を指定します。これらのセルには、ヘッダーやデータ区別情報の場所ではなく、データの開始位置を入力します。これらのセルの値を0のままにすると、Excelインポーターはデータをインポートする場所を自動で調整します。ワークシートの左上に常にデータを表示したままにしておけば、そのデータの前にヘッダーやデータ区別情報があるかどうかにかかわらず、これらのセルに0以外の値を入力する必要はありません。
行の合計数と列の合計数
[行の合計数]フィールドと[列の合計数]フィールドは、Excelインポーターがインポートする行数と列数を指定します。これらのエントリを0に設定すると、Excelインポーターが行数や列数を自動で計算します。Excelインポーターに行数や列数を計算させると、モデルの開発者やユーザーが他の値の変更を心配することなく、必要に応じて行や列をテーブルに追加または削除できるため大変良い方法です。
データの区別
[データの区別]は、ExcelインポーターがExcelワークブックから値を抽出する方法を決定します。ExcelインポーターがExcelデータの読み込みに使用できるコマンドは3つあります。
excelreadnum()
- 指定したセルに数値データが含まれている場合、このコマンドはその数値を返します。それ以外の場合は、0を返します。excelreadstr()
- 指定したセルにテキストデータが含まれている場合、このコマンドはそのテキストを返します。それ以外の場合は、セルに表示されている値をテキストとして返します。excelrangeread()
- このコマンドは、指定した範囲内のすべてのセルを読み込みます。その範囲内のセルにテキストデータが含まれている場合、このコマンドはそのテキストを抽出します。それ以外の場合は、値を数値として抽出します。
スプレッドシートをインポートする場合は、データの区別モードを選択する必要があります。モードを選択すると、スプレッドシートからデータを抽出するために使用する3つのコマンドのいずれか(またはその組み合わせ)がExcelインポーターに指示されます。モードについては、次のリストで説明します。
- 数値 - Excelインポーターは
excelreadnum()
コマンドを使用して各セルの値を抽出します。 - 自動(デフォルト) - Excelインポーターは
excelreadnum()
とexcelreadstr()
の両方を使用して各セルの値を抽出します。次に、両方の結果を分析して、セルに文字列または数値データが含まれているかどうかを判断し、その結果に基づいてテーブルに格納します。 - 列単位 - 指定された列のすべてのセルについて、Excelインポーターは最初のヘッダー以外の行(列の先頭)の値を取得します(数値のみ可)。その値に応じて、Excelインポーターは
excelreadnum()
またはexcelreadstr()
を使用してその列のデータを抽出します。この値を含むセルは、FlexSimの最終テーブルから除外されます。 - 行単位 - 指定された行のすべてのセルについて、Excelインポーターは最初のヘッダー以外の列(行の先頭)の値を取得します(数値のみ可)。その値に応じて、Excelインポーターは
excelreadnum()
またはexcelreadstr()
を使用してその行のデータを抽出します。この値を含むセルは、FlexSimの最終テーブルから除外されます。 - テキスト - Excelインポーターは
excelreadstr()
コマンドを使用して各セルの値を抽出します。 - 値のみ(非常に高速) - Excelインポーターは
excelrangeread()
コマンドを使用してテーブルのすべての値を読み込みます。
自動モードの場合、Excelインポーターはセルにテキストまたは数値データが含まれているかどうかを判断を試みます。このプロセスは正常に処理されますが、場合によってはExcelインポーターが正しく動作しないことがあります。たとえば、分数形式の数値データを含むセルは、0.20
などの数値ではなく"1/5"
などのテキストとしてインポートされます。空のセルは文字列として読み込まれます。ワークシートを正しくインポートするには、Excelまたはデータの区別モードで書式を変更する必要があります。
列単位および行単位モードでは、Excelインポーターは行または列の最初の値を読み取り、その値を使用してその行または列の残りの値の抽出方法を決定します。Excelインポーターは、次の4つの値を認識します。
- 数値データ - Excelインポーターは###を使用して、この行/列のデータを抽出します。
excelreadnum()
- テキストデータ - Excelインポーターは###を使用して、この行/列のデータを抽出します。
excelreadstr()
- FlexScriptデータ - Excelインポーターは
excelreadstr()
を使用して、この行/列のデータを抽出します。テーブルにインポートする場合、ExcelインポーターはこのセルのノードをFlexScriptとして切り替えます。 - C++データ - Excelインポーターは
excelreadstr()
を使用して、この行/列のデータを抽出します。テーブルにインポートする場合、ExcelインポーターはこのセルのノードをC++として切り替えます。これが発生した場合は、インポート完了後にモデルをコンパイルするように求められます。
値のみモードでは、excelrangeread()
コマンドが使用されます。このコマンドは、excelreadstr()
と同じ方法でテキストセルをインポートします。ただし、日付や時刻などの他のすべての値は、生の数値として解釈されます。ExcelのVALUE()
関数を使用すると、テキスト以外のセルの生の数値を表示できます。
次の表は、3つのコマンドを使用してExcelセルを抽出する方法の例を示しています。
セルの値 | セルの形式 | excelreadnum() |
excelreadstr() |
excelrangeread() |
---|---|---|---|---|
1.54 | 数字 | 1.54 |
"1.54" |
1.54 |
10 | 数字 | 10.0 |
"10" |
10.0 |
2/8/2016 | 日付 | 42408.0 |
"2/8/2016" |
42408.0 |
文字列 | テキスト | 0 |
"some text" |
"some text" |
1/5 | 分数 | 0.20 |
"1/5" |
0.20 |
[日時を数値としてインポート]オプションは、[自動データ区別]設定でのみ使用できます。このチェックボックスをオンにすると、日付と時刻の形式のセルが数値としてExcelからインポートされます。また、1601年1月1日以降の秒数がFlexSimで使用できるように数値に変換されます。
モデルのリセット時にテーブルをインポート
このチェックボックスをオンにすると、FlexSimはモデルがリセットされると、このテーブルを再インポートします。これは、Excelファイルが、テーブルが最後にインポートされてから変更されている場合にのみ発生します。
ポストインポートコード
すべてのインポート行が実行された後、Excelインポーターはポストインポートコードを実行できます。このトリガーでカスタムコードを記述すると、すべてのテーブルがインポートされた後にさらにオペレーションを実行できます。
ポストインポートコードを実行
このチェックボックスをオンにすると、すべてのテーブルがインポートされた後にポストインポートコードが実行されます。
バンドルへのインポート
グローバルテーブルは、バンドルを使用してデータを格納するように設定できます。または、[その他]テーブルタイプを使用している場合は、ツリー内でバンドルデータを含むノードを選択できます。この場合は、インポートによって、インポートしたデータのバンドルに正しいフィールドが作成されます。バンドルが動作する方法により、バンドルにインポートする際にはいくつかの制限があります。
- 自動データ区別 - 自動データ区別を使用する場合、インポーターは列の最初のセルのデータタイプのみを調べ、列全体のデータタイプをそのタイプに設定します。これは、バンドル列の行に異なるデータタイプがないためです。
- 列データの区別 - [列]を選択すると、インポーターは自動データ区別を使用しているかのように動作します。これは、バンドル列の行に異なるデータタイプがないためです。
- 行ヘッダー - 行ヘッダーがないバンドルでは、[行ヘッダーを使用]チェックボックスをオンにしてもインポートには影響しません。
- 列ヘッダー - バンドルには列(またはフィールド)名が必要です。したがって、[列ヘッダーを使用]は、オンまたはオフにかかわらず、常に使用されます。
- Flexscript/C++データ - バンドルセルをFlexScript/C++として切り替えることができません。
[エクスポート]タブ
[エクスポート]タブには、次のプロパティがあります。
Excelインポーターとは異なり、Excelエクスポーターは、Excelファイルに書き込む際にデータの区別を使用しません。データタイプは、FlexSimノードデータタイプから取得されます。
存在しない場合にシートを作成
このボックスは、Excelエクスポートツールで指定されたシート(ワークブック内に存在しない)を作成する場合にオンにします。
テーブルデータ
または を使用して、ExcelにエクスポートされるFlexSimのテーブルを選択します。
開始行と開始列
[開始行]フィールドと[開始列]フィールドは、FlexSimのデータが最初にエクスポートされるExcelのセルを指定します。
[行数]フィールドや[列数]フィールドはありません。エクスポートはテーブル全体で行われます。
[カスタム]タブ
[カスタム]タブには、次のプロパティがあります。
説明
このフィールドは、カスタムインポート/エクスポートには影響しません。ユーザーの情報にのみ使用されます。
コード
Excelからインポート/エクスポートする独自のコードを入力します。
FlexScriptノードまたはトリガーからカスタムのインポートコードまたはエクスポートコードを実行するには、次の関数を呼び出します。
treenode excelauto = Model.find("Tools/ExcelAuto");
executefsnode(getvarnode(excelauto, "CustomImport"),NULL);
// or
executefsnode(getvarnode(excelauto, "CustomExport"),NULL);