Excelファイルの内容をテーブルに格納する方法に関して

コメント

9件のコメント

  • 正式なコメント
    服部健太

    ジョブフロー上からKompiraのオブジェクトを新規作成するには、ディレクトリやテーブルオブジェクトの add メソッドを利用します。(詳細はマニュアルの5.3.2.ディレクトリや5.3.11.テーブルをご参照ください)

    たとえば、以下のようなジョブフローになります。

    [data = {
    'ホスト名': 'server1',
    'IPアドレス': '192.168.1.1',
    'ポート番号': 22,
    '接続種別': 'ssh'
    }] ->
    [./some_dir.add: "server1", ./サーバ情報, data=data]

    (実行するジョブフローと同じディレクトリに「サーバ情報」型オブジェクトと、some_dir というディレクトリがある想定です。また「サーバ情報」型オブジェクトのフィールド定義は、それぞれ、ホスト名、IPアドレス、ポート番号、接続種別、という名前の想定です。)

    このように、ディレクトリの add メソッドにパラメータとして、作成するオブジェクト名、型オブジェクト、作成するデータの辞書を渡してやることで、オブジェクトを作成することが可能です。

    以下は、CSVデータを読み込んで、オブジェクトを作成するサンプルですが、こちらも参考になるかもしれません。

    https://support.kompira.jp/column/import_from_csv/

    コメントアクション Permalink
  • aoki

    ご回答ありがとうございました。

    現時点で行いたいことは、ライブラリでExcelファイルの情報を抜き出して、ジョブフローを実行した後に上記のdata = {}に格納することです。現在、data ={}内に値を渡すことができていません。

    ジョブフローを実行し、Excelファイルの情報を同一ジョブ内でdata = {}に値を渡すことに失敗してしまいます。(a~hまでの値の出力はできています)

     

    例えば、画像内のように./example_libraryのexample関数でa~hまでの情報を取得し、その値をdata内に引き渡したいです。(このジョブフローはエラーになっています)

    どのように値を渡せばよいかおわかりでしたらご教授いただきたいです。

    よろしくお願いいたします。

     

    0
    コメントアクション Permalink
  • 服部健太

    example_library.example 関数の中で取得した値を return してやって、ジョブフロー側では $RESULT でその値を取得すれば、期待する結果が得られるかと思います。

    具体的には、

    example_library.example:

    def example_library(file_path, sheet_name):
    ... # file_path の sheet_name の所定のセルの値を読み込む処理
    # 読みだした値を辞書データとして返す
    return {
    a: e,
    b: f,
    c: g,
    d: h
    }

    呼び出し側のジョブフロー:

    [./example_library.example: "/tmp/test.xlsm", "Sheet1"] ->
    [data = $RESULT] ->
    [./test.add: "server_info", ./example型, data=data]
    0
    コメントアクション Permalink
  • aoki

    ご回答ありがとうございました。

    ご教授いただいたように処理を実行したところ、無事に行いたいことを完了できました。

    この度はありがとうございました。

    今後ともよろしくお願いいたします。

    0
    コメントアクション Permalink
  • aoki

    度々申し訳ございません。

    先日ご回答いただいた内容に関連して再度お尋ねしたいことがございます。

    以下の箇所を実行したところ、新規オブジェクトを作成することには成功しました。

    [./test.add: "server_info", ./example型, data=data]

     

    以下は以前お送りいただいたものです。

    [data = {
    'ホスト名': 'server1',
    'IPアドレス': '192.168.1.1',
    'ポート番号': 22,
    '接続種別': 'ssh'
    }] ->
    [./: "サーバ情報テーブル", ./サーバ情報, data=data]

    仮に上記を実行したとすると、サーバ情報テーブルに値が追加されるのではなく新たにオブジェクトが作成されてしまいます。

     

    新規にオブジェクトを作成するのではなく、新規にテーブルを作成することや新規に作成したテーブルにジョブフローから値を追加していくことはできますでしょうか?

    例えば、ジョブフローを実行した後に、上記のようなサーバ情報テーブルを作成したいです。また、サーバ情報を追加する必要がある場合にはその都度ジョブフローから行を追加していきたいです。

    ご教授いただければ幸いです。

    よろしくお願いいたします。

    0
    コメントアクション Permalink
  • 服部健太

    addメソッドを使うことで、ジョブフローから新規にテーブルを作成することも、作成したテーブルにデータを追加することも可能です。

    サーバ情報型のテーブルを作成するには、以下のようにします。

    [./.add: "サーバ情報テーブル", /system/types/Table, data={"typeObject": ./サーバ情報}]

    ここでは、ジョブフローと同じ.ディレクトリに「サーバ情報テーブル」というテーブルを作成する想定です。テーブルの各レコードの型は、ジョブフローと同じディレクトリにある「サーバ情報」型を想定しています。

    作成したテーブルにデータを追加する場合は、

    [./サーバ情報テーブル.add: data={"ホスト名": "server1", ..省略..}]

    のようにすると、データが追加されます。

    0
    コメントアクション Permalink
  • aoki

    ご回答ありがとうございました。

    実行したいことに近づいてきております。

     

    上記のサーバ情報型を指定して、

    [./.add: "サーバ情報テーブル", /system/types/Table,  data={"typeObject": ./サーバ情報型}]

    を実行したところサーバ情報型のフィールドが反映されませんでした。(名称と所有者の欄のみが存在)

     

    ひとつ前の質問の際にお送りした画像「サーバ情報テーブル」のような形式にしたいのですが、どのように改善すればよろしいでしょうか?

    ご教示いただけると助かります。

    よろしくお願いいたします。

    0
    コメントアクション Permalink
  • 服部健太

    テーブルオブジェクト作成時に表示フィールド一覧(displayList)のデータを渡してやることで、ご所望の挙動になるかと思います。(詳細はマニュアルの5.3.11「テーブル」参照)

    ジョブフロー的には以下のようになるかと思います。

    [data = {
    "typeObject": ./サーバ情報型,
    "displayList": ["ホスト名", "IPアドレス", "ポート番号", "接続種別"]
    }] ->
    [./.add: "サーバ情報テーブル", /system/types/Table,  data=data]

     

    0
    コメントアクション Permalink
  • aoki

    ご回答いただきまして誠にありがとうございました。

    想定していたテーブルの作成に成功いたしました。

    また、テーブルへの値の追加も行うことができました。

    今後ともよろしくお願いいたします。

    0
    コメントアクション Permalink

サインインしてコメントを残してください。