質問
読み取り対象のExcelファイルは、セルA1からA3までのセルが結合されており、データはセルA1に入力されています。
このとき、セルA1~C3までのデータを抽出することは可能ですか。
セルA1~A3は固定ではなく、A1~A6、A1~A12のように変動します。
A列は3行ずつセルが結合されており、データはA1、A4、A7、A10、A13に入力されています。
回答
結合されたセルが含まれるExcelファイルから、出力イメージのようにデータを抽出することは可能です。
以下にサポートにて検証済みのスクリプト実装例をご紹介いたします。
あくまで一例となりますので、お客様のご要件に合わせて適宜ご調整ください。
■スクリプトの実装イメージ
■設定手順
1.「スクリプトの実装イメージ」を参考に、以下コンポーネントを配置する
・[シートから読み取り処理]
・[トランザクション処理]
・[繰り返し(データ件数)処理]
・[マッピング]
・[書き込み処理]
2.処理で使用するスクリプト変数を3つ作成する
例:col_A(文字列型)
col_B(文字列型)
count(文字列型)
3.[シートから読み取り処理]の「必須設定」タブにて、ファイルのパス、シート名、列一覧を指定する
4.[繰り返し処理(データ件数)]の「必須設定」タブにて、「1ループでの処理件数」に「1」を入力する
5.[マッピング]にて、入力元データの項目数分レイヤを追加する
例:今回のケースでは、入力元データとなるExcelに「番号」「名称」「金額」の3項目存在するため、
マッピング画面でレイヤ「col_A」、レイヤ「col_B」、レイヤ「other」の3つを作成する
6.[マッピング]のそれぞれのレイヤにて、以下の図のとおりロジックを配置し、マッピングリンクでつなぐ
・[nullチェック]ロジック
・[Not演算]ロジック ※nullオプションで「nullをfalseに変換」を選択
・[スイッチ判定による出力の切り替え]ロジック ※条件数は「1」を選択
・[足し算]ロジック ※入力数は「2」を選択
・[数値定数]ロジック ※数値に「1」を入力
<レイヤ「col_A」>
<レイヤ「col_B」>
<レイヤ「other」>
7.[書き込み処理]の「必須設定」タブにて、ファイルのパス、シート名、列一覧を指定する
また、「書き込み設定」タブにて、以下の図のとおり書き込み位置を指定し、開始セルアドレスにA${count}を入力する
補足
【前提】
Excelでセル結合された場合には、データは特定の1セルに格納されており、格納先となるセル番地は、左上のセルとなります。
例)以下の場合、左上のA1に「結合データ」という値が格納されており、A2:A5と、B1:B5のセルはnullデータとなります。
【マッピングのレイヤごとの処理概要】
●レイヤ「col_A」の処理
入力元データのExcelに存在する、セル結合された項目「番号」に関する処理となります。
1.[nullチェック]ロジックで、入力元のcolumn[1](項目「番号」の値)がnullであるかをチェックします。
null値の場合は「true」を、そうでない場合(番号が入っている場合)は「false」を返します。
2.[Not演算]ロジックで、入力データが「true」の場合は「false」を、「false」の場合は「true」を返します。
ここで1.の[nullチェック]ロジックの結果が反転するため、
null値の場合は「false」、そうでない場合(番号が入っている場合)は「true」となります。
3.[スイッチ判定による出力の切り替え]ロジックで、1番目の値がtrueの場合、2番目の文字列を出力します。
falseの場合、3番目の文字列を出力します。
入力元のcolumn[1]がtrueの場合(番号が入っている場合)は入力元のcolumn[1]の値を
そのまま返します。
falseの場合(null値の場合)はスクリプト変数「col_A」を返します。
※Swhich文の右側のマッピングリンクが2本あることで、スクリプト変数「col_A」には
入力元のcolumn[1]の番号の値が格納されています。
以上の処理によって、結合されたセル内で番号のデータが含まれていないセル(null値)にも
番号のデータを入れることが可能となります。
●レイヤ「col_B」の処理
入力元データのExcelに存在する、セル結合された項目「名称」に関する処理となります。
※レイヤ「col_A」の処理と同様の処理になります。
1.[nullチェック]ロジックで、入力元のcolumn[2](項目「名称」の値)がnullであるかをチェックします。
null値の場合は「true」を、そうでない場合(名称が入っている場合)は「false」を返します。
2.[Not演算]ロジックで、入力データが「true」の場合は「false」を、「false」の場合は「true」を返します。
ここで1.の[nullチェック]ロジックの結果が反転するため、
null値の場合は「false」、そうでない場合(名称が入っている場合)は「true」となります。
3.[スイッチ判定による出力の切り替え]ロジックで、1番目の値がtrueの場合、2番目の文字列を出力します。
falseの場合、3番目の文字列を出力します。
入力元のcolumn[2]がtrueの場合(名称が入っている場合)は入力元のcolumn[2]の値を
そのまま返します。
falseの場合(null値の場合)はスクリプト変数「col_B」を返します。
※Swhich文の右側のマッピングリンクが2本あることで、スクリプト変数「col_B」には
入力元のcolumn[2]の名称の値が格納されています。
以上の処理によって、結合されたセル内で名称のデータが含まれていないセル(null値)にも
名称のデータを入れることが可能となります。
●レイヤ「other」の処理
入力元データのExcelに存在する、セル結合されていない項目「金額」に関する処理となります。
また、出力結果の書き込み位置の開始セルアドレスを取得する処理も行っております。
1.入力元のcolumn[3]と出力データのcolumnをマッピングリンクでつなぎ、入力元のcolumn[3]の値を
そのまま出力します。
2.[足し算]ロジックで、[繰り返し(データ件数)処理]のコンポーネント変数「count」に
[数値定数]ロジックの「1」を足して、スクリプト変数「count」に格納します。
※スクリプト変数「count」は、後続の[書き込み処理]で書き込み位置の開始セルアドレスを
指定するために使用します。
※foreachのcountの初期値が0であるため、foreachのcountに1を足します。
コメント
0件のコメント
記事コメントは受け付けていません。