DTP駆け込み寺

No.20660へ返信

記事投稿フォーム
補助
送信

[ 返信 ]

Re^3: 表に対して縦方向への流し込みスクリプト

> 新しく作ったテキストフレーム内の【改行】を無くして【タブ】で区切るという変換が行われているという認識に変わったのですが、ここの【タブ】で区切っている部分を【改行】に変えてみたのですが、変わらず行方向へ流し込みとなってしまいます。

> splitでの分割を(TAB)から(CR)に変えてしまえば良いものかと思いましたが、(TAB)(CR)を入れ替えるだけでは意味がないんですね…
> 【タブ】で区切るから行方向への流し込みになるのだとしたら、
> 列方向に当たる記号があるのか…
> それ以前に選択した表の列ごとのセル数を数えた方が良いのか…

 かいつまんで少しだけ。
変数 tblObj はスクリプト実行時に選択されているもので、
switch文で「セル、表、行、列 の時だけ動く」としてあります。
言い換えると、いずれかの「セル群」が選択されていることが動作条件ですね。

そのセル群に対して .contents = で流し込むデータはテキスト配列です。

スクリプト実行前に、クリップボードにタブ区切りテキスト(またはヨソの表)が入っている前提ですね。
これをそのままペーストすると動かないことがあるので、わざわざダミーのテキストフレームにペーストして、それを初めて変数に入れています。

ペーストで済むならタブ文字や改行文字の処理など不要なのですが、
contentsに値を入れるために改行文字とタブ文字で順序よく分割し、配列に連結しています。

タブ区切りテキストの場合、
1 2 3
4 5 6
という表のソースは
"1\t2\t3\n4\t5\t6"
ですが、ここで用意している配列は
["1", "2", "3", "4", "5", "6"]
となります。基本的に左上のセルから列方向に要素が入っていき、右端まできたら次行の左端の先頭セルに折り返して入っていきます。流し込み先の表が何列何行かを把握しなくてよくなるイメージです。
最後の処理でlengthの比較をしているのも、この配列の要素数ですね。

また、.contents = の流し込み順は変えられないので、タテヨコ逆をやるとしたらfor文でタテ方向にセルを指定しながら1こずつ配列の要素を取り出しながら入れていく、などする必要があります。でも連結セルがあると非常にめんどくさいのでおすすめできません。。

で、改行文字とタブ文字の処理を入れ替えると、どうなるか。
要素の並べ替えを塾講する必要があります。
ぶっちゃけ、この並べ替えさえ上手にやれば従来の流し込み順に沿って入れられそうな雰囲気ですが、
仕組みを把握できていなければ答えが出なかろうと思います。

文字列の配列化、配列の並び順の研究。
処理経過の変数の値をよく見守ることです。

[20660] (z-) (2021/10/29 Fri 13:07)