y.c
(BYC)
1
お世話になっております。
現在、Studioの方でCSVデータを読み込み→所定のEXCELフォーマットへの転記(必要な列のみ)のロボットを作成しています。
ですが、元のCSVに項目行がなく、1行目から値が入っています。但し、レイアウトは決まっているので、どの列に何の値が入ってるかは特定できます。最終的なEXCELの転記も考えて、このまま項目名がないままなのは扱いづらいので、項目行を追加したいと考えています。
データテーブルを構築アクティビティで、列名を付けたデータテーブルを作ってはみたものの、
そこにCSVの値を入れ込むような仕組みが上手くできません。
なにか良い方法があれば、ご教授いただけますと幸いです。
①CSVデータ読み込み (値データのみデータテーブル)
②データテーブルを構築 (列名のみ設定したデータテーブル)
↓
これをなんとかマージしたい
Yoichi
(Yoichi)
2
こんにちは
まずヘッダー+改行だけのコンマ区切りの文字列を用意します。例えば以下のようなもの
"Col1,Col2,Col3"+vbCrLf
CSVファイルをテキストファイル読み込みで読み取ります。
GenrateDataTableアクティビティで上記を連結したものを、CSV解析ONで読み取りDataTableに変換します。
以下実装例です。
y.c
(BYC)
3
Yoichiさん、いつもありがとうございます。
ご教授いただいた方法で、EXCELに書き出してみたのですが、
1行目がColumn1、Column2、Column3…
2行目が設定した項目行、3行目以降がCSVの値で入ってきました。
1行目のColumn1、Column2、Column3…を消すことはできないでしょうか?
また、テキストファイルで読み込みをすると、文字列が文字化けしてしまい、
エンコードに"shift_jis"を指定してもサポートされていませんとエラーになってしまいます。
(ちなみに、”SJIS”も試しましたがダメでした)
CSVで読み込んだ際は、エンコードに"shift_jis"を指定でエラーは出ませんでした。
Yoichi
(Yoichi)
4
こんにちは
列名については以下UseColumnHeaderのチェックをONにしてください。
文字コードについては以下参照してみてください。
y.c
(BYC)
5
ありがとうございます!
無事に項目行とエンコードの問題は解消されました。
一旦、項目行+CSVの値のデータベースができたことは確認できたのですが、
その後、Excelフォーマットへの転記でまた苦戦しています…。
特定の列の値だけ取得して書き込むのですが、一部の項目名が書き込み先のExcelフォーマットと違うものになるため、それぞれの項目名をマッチさせて書き込む必要があります。
例えば、データベースの「倉庫コード」→Excelフォーマットの「出荷先」列の値に入れたいという場合はどのように指定すればいいでしょうか?
Yoichi
(Yoichi)
6
こんにちは
書き込み先の列名が順序も含めて固定であれば、CSVから取り込んだDataTableの列を不要なものを削除、必要なものの順番を並べ替えて、書き込めばよいと思います。
列名が動的に変化するならそれなりのロジックが必要になります
どちらになりますでしょうか?
y.c
(BYC)
7
書き込み先の列名も順序も固定です。
列名と順序としては、こんな感じです。赤字はデータベースと列名も変わるものです。

Yoichi
(Yoichi)
8
こんにちは
データテーブルをフィルタアクティビティで列の設定を
例えば以下の様にすると、この列の順番のDataTableができますので、
これをヘッダなしでEXCELに書き込めばと思いますがいかがでしょうか?

y.c
(BYC)
9
ありがとうございます。フィルタアクティビティ初めて知りました!
明日また続きをやろうと思いますが、添付のようにフィルタを設定したのですが、
新しいデータテーブルをExcelに書き出してもフィルターのかかってない状態で、
全列の値が出力されてしまいます。

また、フォーマットの1、2列目には固定の値を入れる予定なので、
3列目からフィルター後のデータテーブルの値を入れたいのですが、
そういったことは可能なのでしょうか?
明日また続きやりますので、回答も急ぎでなくて大丈夫です。
いつもありがとうございます。
Yoichi
(Yoichi)
10
こんにちは
すみません、上記画像の列選択モードが誤っておりました。「削除」ではなく「保持」にする必要があります。
また、フォーマットの1、2列目には固定の値を入れる予定なので、
3列目からフィルター後のデータテーブルの値を入れたいのですが、
そういったことは可能なのでしょうか?
上記フィルターする前にデータ列追加のアクティビティで列を追加、DefaultValueプロパティに情報をセットしておくと、その内容が入力された列が追加されます。
追加後、並べ替えで1,2行目として追加した列を指定すれば良いかと思います。
y.c
(BYC)
11
おはようございます。
ご回答ありがとうございます。
ご教授いただいた方法で無事に実装できそうです!
重ねて質問してしまい、申し訳ないのですが、
Excelのフォーマットは前回の入力分をクリアにしてから書き込みをしようと思ってます。
「シート/範囲/テーブルをクリア」アクティビティを使用したのですが、
書式までクリアされてしまいます。書式は残して、値だけクリアにする方法はないものでしょうか?
Yoichi
(Yoichi)
12
都度シートをクリアしても良いと思いますが、テンプレートファイルやテンプレートシートを用意しておいて
それをコピーしたほうが楽かと思いますが、いかがでしょうか?(ファイルごと、あるいはシートごと、それがNGなら範囲をコピーしてきても良いかもしれません)
y.c
(BYC)
13
なるほど。ご提案ありがとうございます。
テンプレートをコピーで大丈夫だと思います。
元のCSVについては複数置かれる場合もあるので、
CSVの数だけExcelファイルをコピーして作成するようにしたいと思います。
今回のロボットに関しては、Assistantで動かしてもらう想定なので、
稼働時に特定のフォルダに格納されたCSVに対して処理を行うようにしたいです。
Yoichi
(Yoichi)
14
繰り返し(フォルダー内の各ファイル)アクティビティを使ってみてください。
中身はテキスト読み取りの部分をCurrentFile.FullNameとする程度で、あとはほとんど同じかと思います。
y.c
(BYC)
15
ありがとうございます。
Excelに書き込みのところで「 ソース データに行または列がありません。」とエラーが出てしまいます。CSVの値が上手く読み込めていないようです。
現在サンプルとして、CSVデータは2つ格納しています。
添付のフローになっているのですが、どこかおかしいでしょうか?
フロー.pdf (207.7 KB)
尚、せっかく追加した固定列2行は、
一旦入れなくていいと要望があったのでコメントアウトしてます。
Excelのフォーマット上からもこの2列は削除しました。
Yoichi
(Yoichi)
16
こんにちは
これだけではわかりませんので、適当な場所にブレイクポイントを設定、変数の中身が想定通りかの確認→F11(Step Into)で1アクティビティづつ進めて、各処理が想定通りに行われいるかを確認してみてはと思います。(エラー自体はデータテーブルが空になっているものです)
y.c
(BYC)
17
ありがとうございます。
改めて見直して修正したところ、データテーブルの値が入るようになり、
エラーは解決いたしました。お騒がせしました。
これから、ご提案いただいたフォーマットをテンプレートしてコピーし、
そちらに書き込みする部分のフローを作っていきたいと思います。
①テンプレートファイルをコピー
②コピーされたファイルにデータを流し込み
③名前(別名)を付けて保存
というイメージではあるのですが、作りとしては合っていますでしょうか?
ただ、保存する際はファイル名に連番を付ける等して、2個目以降も別ファイルとして生成したいのですが、ここがどうしていいか悩んでいます。
Yoichi
(Yoichi)
18
こんにちは
コピーした時点で必要な名前が分かっているなら、その時点でその名前でコピーするか、
あるいはテンポラリーの名称にしてファイルベースで名前変更しても良いと思います。
あと内容がタイトルと離れっていますので、必要に応じて別トピックとして立てた方が良いかと思います
y.c
(BYC)
19
ありがとうございます。
ちょっと確認しながら試行錯誤してみたいと思います。
そうですね、ダラダラと質問続けてしまって、ズレてしまい申し訳ないです。
一旦こちらはクローズさせていただきます。
1 Like
system
(system)
Closed
20
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.