LoginSignup
0
1

More than 3 years have passed since last update.

[BluePrism]Excelの、列名が重複していてCollectionに取り込めないデータの重複列を削除するオブジェクトを作成しました。

Last updated at Posted at 2019-11-14

これを書いた理由

Blue Prismで、ExcelデータをCollectionに取り込むVBOは、MS Excel VBOの「Get Worksheet as Collection」です。
vbo.png

でも、Excelの帳票で、同じ列名が何個もあるものは、そのままだとCollectionに取り込めません。
(なんで同じデータが何回も書いてあるのかとかちゃんとした帳票作れとかそういうお話はとりあえず棚上げしておくとして)

どうにかして重複列をないようにしないといけないのですが
今回は簡単に、2回目以降に出現する重複列名の列を削除してしまうものを作成しました。

これの記事の、「カラム名の重複を削除したいとき」と同じような働きをするものです。
【Python3】pandas.DataFrameのカラム重複削除(Qiita)

作成したオブジェクト

duplicate.png

たとえばこういうExcelデータを入れます。赤で囲った列が重複(削除したい列)です。
testdata.png

  1. 1行目をヘッダにせず、データとしてデータテーブルに読み込みます。
    「Get Worksheet as Collection」ではなくて「Get Worksheet as Collection Offset」を使い、Use HeaderをFalseにします。
    こうすることで、1行目を列名でなくて普通のデータの1行目としてCollectionに取り込みます。
    列名は「Column1]「Column2」……という具合にBlue Prismが自動でつけてくれます。
    vbo2.png
    読まれたらこんな感じ
    yomaretadeta01.png

  2. これで取りこんだデータの1行目だけをコピーして、別のCollectionに入れます。1行だけのCollectionになります。
    yomaretadata02.png

  3. VBOの「Collection Manipulation」の中に「Transpose Collection」というのがあって、
    これはいわゆる「行列の転置」かと思いきや全然違って、Collectionを2列にしてくれる(1列目が列名で2列目がデータ)だけのものです。
    これを使って、2で作成した1行だけのCollectionを、2列のCollectionに変換します。
    yomaretadata03.png

  4. Value(列名になるところ)を並べ替えます。同じ名前のものに隣接してもらうためです。下図の青枠です。

  5. 重複チェック用に1列追加します。下図の緑枠です。
    yomaretadata04.png

  6. 重複列に1を立てます。
    kai01.png

  7. フィルタをかけて6で1を立てた列だけにして、Name(「Column〇」の列)を降順でソートします。下図の青枠です。
    kai02.png

  8. 7で示した図の青枠に、削除すべき列の列名があるので、これを使って1で示したデータの列を削除します。
    重複列が削除されたデータこれ
    kai03.png

  9. あとは1行目を列名にしたらできあがりです。
    kai04.png

終わりです

Transpose Collectionってなんの役にたつんだろう……てかこれをこの仕様で作ることにしたの誰……
くらいに思ってたんですが、今回初めて使いました。

昔コボラーだったのでこんなダサいやりかたなんですが、今のもっといいやりかたがあったら教えてください。ありがとうございます。

テストデータはここで作成しました。→ 疑似個人情報生成

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1