Chatwork【出力処理】

2023年4月6日

指定されたメッセージIDに基づいてExcelにメッセージ内容を出力します。本体処理とは別タブ(サブルーチン)にて実施します。

処理概要

本体側で取得した出力対象メッセージ(メッセージID)をExcelシート(行番号:^row)に出力し、^rowを次の行に移します。

サブルーチンの引数と戻り値

本体側から渡される引数は、^str_mid(メッセージID)、^row(Excelシートの行番号)です。
出力処理内では ^str_midを元にメッセージを取得し、Excelの ^row行に出力します。出力後、^rowに 1加算してExcel行を進めます。
呼び出し元へ返す戻り値は、^row(出力後のExcel行番号)です。

操作イメージ

ポイント
  • 非表示メッセージは出力せずスキップします。
  • メッセージIDは、数字が潰れるのを防ぐため文字として出力します。
  • 同じメンバーが続く場合は、メンバー名や日付は省略されます。よって、Excelの1つ前の行から取得するようにします。
  • 添付ファイルをダウンロードすると、画面上の表示名と異なる(同じファイル名の場合は連番がふられる)ことがありますので、ダウンロード時にファイル名を取得します。
  • G列のリンクには、Excelの「HYPERLINK関数」を使用します。

非表示メッセージのスキップ

hiddenメッセージのところで説明した、class属性に “hiddenMessage"を含むメッセージを出力対象から除外します。

hiddenメッセージの除外

IF文で、現在のメッセージがclass属性に “hiddenMessage"を含む場合は、RETURN文で呼び出し元に戻ります。この場合、Excel行番号 ^rowは呼び出し時と同じ値が返されます。

変数^PreRowの宣言

同一人物が続けて発言した場合に、メンバー名・月日をExcelの前の行から取得します。そのための変数 ^PreRowを宣言します。

^PreRowの宣言

^PreRowには、現在のExcel行の、1つ前の行番号が入っています。

メッセージID

メッセージID(形式:_messageId99…99)から、数字部分を取り出して、ExcelシートのA列に出力します。
Excelでは12桁以上の数を入力すると指数表示されるので、先頭に「’」を付けて、文字として出力します。

日時

日時の取得

画面上の日時を変数 ^DateTimeに代入します。

日時の形式は、「99月99日 99:99」となりますが、同一人物が続けて発言した場合は月日は省略され「99:99」となります。

日付の出力

^DateTimeに格納されている日時から、日付を取り出して出力します。
日付と時刻の間には半角スペースが存在するので、指定した文字位置を返す【TYPE:INSTR】を使用して、取り出す文字位置を特定します。

No1STR:INSTRを用いて、^DateTimeの値に含まれる半角スペースの文字位置を数値型変数 ^dayに保存します。
No2~No3^DateTimeにスペースが含まれるとき(INSTRの結果が1以上)は、STR:LEFTで日付部分を取り出し、変数^Dateに格納します。(LEFTでは、先頭から半角スペースの手前までを取り出しています)
No4~No5^DateTimeに日付がなくスペースが含まれないとき(INSTRの結果が0)は、変数^PreRowを利用して、Excelの前の行から日付を取得するようにします。
No7B列に^Dateの値を出力します。
セルの値は、画面から日付を取得できた場合は「99月99日」、画面に日付が存在しない場合は「=B^PreRow」(^PreRowは1つ前の行番号)となります。
日付の取得

時刻の出力

【TYPE:MIDDLE】を使用して、日時から時刻部分を取り出します。^dayには、^DateTimeでの半角スペースの文字位置が格納されています。

画面に日付が存在する場合は(99月99日 99:99)、^dayの1つ後ろの文字から5文字を取り出します。日付が存在しない場合は(99:99)、^dayは0ですので1文字目から5文字目までを取り出すことになります。

取り出した時刻を変数 ^Timeに代入し、ExcelシートのC列に出力します。

メンバー

同一人物が続けて発言した場合はメンバーは表示されません。その場合は日付と同様にExcelの前の行から取得するようにします。

No1~No3画面にメンバーが表示されている場合は、変数 ^memberにメンバー名を代入します。
No5画面にメンバーが表示されていない場合は、Excelの現在より1つ前の行 ^PreRowから値を持ってくるようにします。
No7D列に^memberの値を出力します。
セルの値は、画面からメンバー名を取得できた場合にはメンバー名が、取得できなかった場合には「=D^PreRow」(PreRowは1つ前の行)が格納されています。
メンバーの取得

メッセージ

メッセージの出力

メッセージ内容をExcelシートのE列に出力します。

ファイルのダウンロード

ファイル名をクリックするとダウンロードが始まります。ファイル名はExcelシートのF列に出力します。
同時にダウンロード先のリンクを、Excelの【HYPERLINK関数】を使用してG列に出力します。

ブラウザでファイルをダウンロードすると、すでに同じ名前がある場合は自動的にリネームされるためファイル名が変わります。実際にダウンロードしたファイル名を【TYPE:DW-DIALOG】を使用して取得します。

ダウンロードの表示
No1添付ファイルがあるか判定します。
No2表示ファイル名をF列に出力します。
No3ファイル名のラベルをクリックすると、ダウンロードが開始され、ブラウザの「ダウンロードの表示」が表示されます。
No4【TYPE:DW-DIALOG】を指定して「ダウンロードの表示」から、実際にダウンロードされるファイル名を取得します。ファイル名は出力値欄に出力されます。
No5取得したファイル名を変数 ^nameに代入します。
No6^nameの内容をExcelのG列に出力します。ExcelのHYPERLINK関数を使用して、リンク先アドレスを「ダウンロード先フォルダ\ダウンロードしたファイル名」とします。
ファイルの取得

Excel行を進める

一通り出力したら、Excelシートの行番号 ^rowを次の行に進めます。

Excel出力行を進める

呼び出し元には戻り値として、更新した^rowの値が返ります。

完成シナリオ