8 返信 最新の回答 日時: Jan 14, 2005 4:48 PM ユーザー:(kwgc)

    表の変換

      こんばんわ。

      FDKを使用して表変換のプラグイン(dll)作成を行っております。
      その際、F_ApiFcodes()という関数を使用して実現しているのですが、実行時に表変換の為のダイアログ(*1)が表示されます。
      (*1 -- このダイアログにて変換したい表書式等..を選択する仕様となっております)

      ここで皆さんに教えて頂きたいのですが、
      表変換を行う際、事前に変換したい表書式等..を指定して、表変換のダイアログを表示する
      ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
      事なく、処理を行えないものでしょうか?
      ‾‾‾‾
      宜しくお願い致します。
        • 1. Re: 表の変換
          Level 1
          kwgc様。

          f-codeを実行している前後が良く分からないですが…。

          表変換のダイアログ、と考えると、
          なんらかのテキストファイルを取り込み、
          そのテキスト解析をFrameMakerの標準機能を使って表を挿入している、
          のではありませんか?

          単純に表を挿入するのであれば、F_ApiNewTable()で作れます。
          ただ、テキスト解析部分を実装しなければならないのかな?と思いますが。
          • 2. Re: 表の変換
            Level 1
            ymgc様、回答ありがとうございます。

            そうですよね。F_ApiNewTable()を使用すれば引数に表書式を指定できるのでよいと思ったのですが、データ部分が表とリンクしないので残念。
            標準の表変換ダイアログを表示せずに行う事は、難しいのでしょうか。
            単純に表を挿入した後にデータ部分を各セルに埋め込んでいけばできなくないとは思うですが現実できではないですよね。
            • 3. Re: 表の変換
              Level 1
              kwgc様。

              文字列操作のAPIを使って、
              各セルに文字列埋め込んでいけば良いので、
              難しくはないと思いますよ。

              FrameMakerの標準機能も、
              表面的には見えなくても同じような事をしてるのかな、と。
              • 4. Re: 表の変換
                Level 1
                ymgc様。

                F_ApiNewTable()にて表を挿入すると任意で生成要素名をつけられないように思われます。
                EDD定義ファイルにて表構造の要素関連を記述しても無理でした。やり方がまずいのかもしれませんが。
                <自動で生成される要素イメージ>
                TABLE
                |-TITLE
                |-HEADING
                |  |-ROW
                |    |-CELL
                |    |-CELL
                |-BODY
                |-ROW
                |-CELL
                |-CELL
                • 5. Re: 表の変換
                  Level 1
                  kwgc様。

                  表の生成では、FrameMaker標準の要素名(投稿に書いてある要素イメージ)になります。
                  EDDの要素名に合わせるには、
                  生成した後に各要素の名前を設定する、という手順を行う必要があります。

                  例えば、BODY を TableBodyに変えるのであれば…。
                  生成した表オブジェクトから表ボディに該当するエレメントオブジェクトを取得し、
                  その名前を変えてあげればOKです。
                  サンプルコードを以下に抜粋しますので、参考にしてみてください。
                   elemId = F_ApiGetId(docId, tblId, FP_TblBodyElement);
                   defId = F_ApiGetNamedObject(docId, FO_ElementDef, "TableBody" );
                   F_ApiSetId(docId, elemId, FP_ElementDef, defId);

                  ※EDDを変えたら、プログラムも変える必要がありますが。
                  • 6. Re: 表の変換
                    Level 1
                    あるデータをF_ApiNewTable()を使用して
                    表変換する場合、下記の手順のようになりそ
                    うですね。

                    <手順>
                    1. データ部分の読み込み
                    2. 表の挿入(F_ApiNewTable()にて)
                    3. 生成された表構造の要素名変更
                    4. 読込データを各セルに埋め込む
                    5. 表のレイアウト調整

                    ※F_ApiFcodes()を使用する方法と比べると
                     と少々手間が掛かりレスポンスにも影響が
                     でそうな感じですね。
                    • 7. Re: 表の変換
                      Level 1
                      kwgc様。

                      そうですね。
                      手順を踏めば、FrameMaker標準機能(表変換ダイアログの表示)を期待通り(?)に実現できますね。
                      別な方法は?って事で回答してきましたが、ここ↓からは、プログラマとしての個人的意見です。

                      動作が保証されている標準機能を使わずに、
                      製造の手間ヒマかけて(さらにバグも盛り込む事になるでしょう)というのは、
                      どうなのかな?と感じています。

                      レスポンスに関しては、実際に計測しないと分かりませんが、
                      内部的には同じような動きをしてると思うので、あまり差はないかと思いますよ。
                      • 8. Re: 表の変換
                        Level 1
                        ymgc様。

                        色々とご回答ありがとうございます。

                        FrameMaker標準機能を使用して表変換を実現
                        する方法が現実的&確実という事ですね。

                        手間ヒマをかけた分、バグ発生率が高くなり
                        ユーザーとの信頼関係に影響がでる可能性が
                        ありますものね。
                        それとプログラマとして解り易い・見易いソース
                        造りにも気を配らないといけませんね。