エクセルファイルの読み込みについて

MZ Platformとは 掲示板 MZプラットフォームユーザー会掲示板 エクセルファイルの読み込みについて

9 件の投稿を閲覧中 - 1 ~ 9 件(全 9 件)
  • 著者
    投稿
  • #7358
    yuzuki1010
    一般参加者

    お世話になっております。
    CSV入力コンポーネントのメソッド「ファイル名を指定してCSVデータを読み込み、イベントを発生させる」のようにダイアログを出さずにエクセルファイルを読み込む方法はありますでしょうか?
    ファイル選択コンポーネントでディレクトリを設定まではできますが、毎回ダイアログを発生させると時間がかかってしまいます。
    ご助力お願い申し上げます。

    #7359
    MZPlatformユーザー会
    サイト管理者

    お問い合わせありがとうございます。

    [EXCELファイルアクセス]コンポーネントを使ってEXCELファイルを読み込んでいるという前提で回答いたします。
    [EXCELファイルアクセス]のメソッド「ファイルからブックを読み込んで選択する(Stirng)」でファイル名を指定して、ファイルを読み込んでいます。このメソッドの引数に絶対パスあるいはビルダーの起動ファイルからの相対パスで、ファイル名を指定することができます。

    EXCELファイルアクセス.mzaxのサンプルファイルで言うと、例えば[ファンクション(ID:26 EXCELインポート処理(セル用))]の処理要求イベントの2番目の接続処理です。
    上記メソッドの引数に直接ファイル名を指定しても動作するはずです。

    ただし、この処理の前に[ファイル(ID:91 EXCELインポート処理(セル用)]コンポーネントにファイル名を設定しており、これはファイル保存時の拡張子の設定に使われています。
    もし例えばサンプルファイルを読み込み時ダイアログ表示無しに改修するとしたら、
    1)[ファイル選択ダイアログ]のデータ選択イベントに繋がる2つの処理を[ボタン]のアクションイベントに繋ぎ変えます。
    2)1番目の接続処理の[ファイル]コンポーネント「ファイル名を設定する(String)」の引数にファイル名を指定します。
    3)2番目の接続処理の[ファンクション]「ファンクションの呼び出し(1引数)」でもファイル名を引数に設定しています。2)でファイル名を設定済みの[ファイル]コンポーネントから「ファイルの絶対パスでのファイル名を取得する」で取得します。あるいは再度ファイル名を直接指定してもよいです。

    以上、ご不明な点がございましたら、再度ご連絡いただければ幸いです。

    なお、MZ Platform4.0から[データベースアクセス]を使ってJDBC接続でエクセルファイルが読み込めるようになりました。
    https://ssl.monozukuri.org/mzplatform/docs_web/mztutorialexceldispatch.html
    もしご興味があればご検討ください。
    どうぞよろしくお願い申し上げます。

    #7360
    yuzuki1010
    一般参加者

    EXCELファイルアクセス.mzaxを拝見し、修正を試みましたが、ファンクション機能を使ったことがなく、理解が難しかったです。(ファンクション)
    1)[ファイル選択ダイアログ]のデータ選択イベントに繋がる2つの処理を[ボタン]のアクションイベントに繋ぎ変えます。
    ⇒出来ました。
    2)1番目の接続処理の[ファイル]コンポーネント「ファイル名を設定する(String)」の引数にファイル名を指定します。
    ⇒1)の後に[ファイル]コンポーネントで設定するという事でしょうか?
    3)2番目の接続処理の[ファンクション]「ファンクションの呼び出し(1引数)」でもファイル名を引数に設定しています。2)でファイル名を設定済みの[ファイル]コンポーネントから「ファイルの絶対パスでのファイル名を取得する」で取得します。あるいは再度ファイル名を直接指定してもよいです。
    ⇒ファンクションにはフレームが設定してありましたが、3)のファイル名とは読み込みたいファイルのディレクトリという理解でよろしいでしょうか?

    EXCELファイルアクセス.mzaxは使用せずに試みていました。Excel ファイルアクセスコンポーネントのメソッド「ファイルからブックを読み込んで選択する」に読み込みたいファイルのディレクトリを設定し、それをテーブルまたはテーブル格納変数に設定するような形には出来ないのでしょうか?

    【本案件がしたい処理】
    それぞれ6種類文章を管理する台帳のエクセルファイルがあり、それらの台帳ファイルに登録されている識別番号文章と他の台帳に登録されている識別番号の文章で関連がある文章ファイルを自動オープンできるシステムを作製しようと思っております。

    #7361
    MZPlatformユーザー会
    サイト管理者

    ご返信ありがとうございます。

    EXCELファイルアクセスのサンプルを無理に使っていただく必要はないので、「ファイルからブックを読み込んで選択する(String)」にファイル名を設定できれば、処理は可能です。
    大変失礼いたしました。

    目的のフォルダ内のファイルを開く、簡単なサンプルファイルを作成してみました。フォルダを指定すると、その中にあるファイルの名前が[リスト]に表示されます。

    フォルダやファイル名の取得には[ファイル]コンポーネントを使用します。
    今回は下位フォルダは表示せずファイルのみを取得するようにしてありますが、[ファイル]コンポーネントのメソッドによっては、下位フォルダーも取得可能です。
    また[テーブル]への設定は[リスト格納変数]にファイルのリストを格納しましたので、要素数と同じ行数の[テーブル]を用意し、列データとしてリストデータを設定することが可能です。

    [EXCELファイルアクセス]以外にもファイル名が判れば文書を開くことができるコンポーネントとして[外部ファイル通信]などもございます。
    また、今回は使用していませんが、複数のEXCELファイル内に格納された同じ文書番号を持つデータを探すには[データベースアクセス]で接続して、Select文で取得することも考えられます。

    サンプルファイルをご確認いただき、ご不明な点ご要望等ございましたら、どうぞご連絡いただければ幸いです。よろしくお願い申し上げます。

    添付ファイル:
    #7368
    yuzuki1010
    一般参加者

    サンプルファイルありがとうございました。こちらでサンプルファイルをデバックしながら確認をしました。サンプルファイルで「ファイルからブックを読み込んで選択する(String)」にファイル名を固定で設定すると、ファイルの読み込みができるのですが、私の作成しているMZファイルで同じ様なことをしてもファイルの読み込みが出来ませんでした。
    もしかするとVerの違いにより使用できない機能とかあるのでしょうか?
    使用しているのは3.6_64\PFBuilder.exeを使用しています。

    #7369
    MZPlatformユーザー会
    サイト管理者

    ご連絡ありがとうございます。

    [EXCELファイルアクセス]への軽微な修正は行いましたが、ver.4.0と3.6で大きな変更はありません。
    手元でもver.3.6_64で確認を行いましたが、固定値で絶対パスでファイル名を指定して、ファイルを読み込むことができました。

    原因として考えられるのが、ファイルまでのパスにスペースや全角文字が多用されていると読み込めない場合があります。

    また、[外部プログラム通信]のメソッド「標準のアプリケーションファイルを開く(File)」の引数の型が「File」型となっている一方で、[EXCELファイルアクセス]のメソッド「ファイルからブックを読み込んで選択する(String)」の引数は「String(文字列)」型となっているように、どこかで文字列型ではなくファイル型やオブジェクト型のデータを要求されている処理があり、エラーが発生していることも考えられます。
    [ファイル選択ダイアログ]のデータ選択イベントの内包データとして、「イベント対象データ」はファイルオブジェクト、「選択データ」は選択したファイル名が取得されます。
    ただ、「ファイルからブックを読み込んで選択する(String)」で絶対パスでのファイル名でファイルが読み込まれますので、これは少し可能性は低いです。

    もう一度、[外部プログラム通信]などの余分な処理を削除したサンプルファイルをお送りいたしますので、お試しいただき再度お気づきの点をご連絡いただければ幸いです。
    どうぞよろしくお願い申し上げます。

    添付ファイル:
    #7377
    yuzuki1010
    一般参加者

    確認できました。ありがとうございました。
    ちなみに今エクセルファイル上の指定セルを取得したいのですが、
    Excelファイルアクセスで、起動メソッドを以下の順でしてしました。「現在の行のセルを選択する。」、「現在のシートの行を選択する」、「現在のセルの値を文字列として取得する」
    しかし、読み込むエクセルファイ上で指定のセルが結合がされており、指定セルの文字列が取得できず困っています。
    何か簡単な処理で結合を解除出来たりできないのでしょうか?

    #7379
    MZPlatformユーザー会
    サイト管理者

    ご連絡ありがとうございます。

    手元で確認した限りでは、結合されたセルの値は結合範囲の『左上』のセルに入っていて、MZの[テーブル]上でもその位置に表示されます。
    例えばEXCELのセルA1,A2,B1,B2が結合されているとき、A1に値が入っているということです。
    指定位置のセルを読み込む場合でも、テーブル全体を読み込む場合も(繰り返し処理で行とセルを指定している)同じように表示されました。

    気になりましたのが、「現在のシートの行を選択する」と「現在の行のセルを選択する」の処理の順番ですが、これは行の選択処理を先に設定してください。
    また、行やセルの位置は0から数えてスタートするので、A1のセルはMZでは0行目、0番目の位置になりますのでお気を付けください。

    以上ご確認いただいても、セルの値が読み込めないという場合は、どうぞ再度ご連絡ください。
    エラーが発生して読み込めない場合はそのエラーの内容もお知らせください。
    そのセルが結合されているか知るメソッド「isCurrentCellMerged()」やセルの結合を解除する「removeMergedRegion(int)」メソッドは存在しますが、セル結合以外の原因があるように推測いたします。

    なお、最近はセルは結合せず、セルの書式指定で「選択範囲で中央」で中央に配置されていることも多いですが、この場合も範囲の左端のセルに値が入っています。

    以上お手数をお掛けいたしますが、どうぞよろしくお願い申し上げます。

    #7380
    yuzuki1010
    一般参加者

    「現在のシートの行を選択する」と「現在の行のセルを選択する」の処理の順番を変えて、上記前に現在のブックのシートを選択するを追加した所、上手く処理できました。
    結合が原因かと思いましたがこちらの勘違いでした。
    ご助力ありがとうございました。

9 件の投稿を閲覧中 - 1 ~ 9 件(全 9 件)
  • このトピックに返信するには、ログインしてください。