0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python Openpyxlを使用したエクセルファイル列追加、行削除処理

Posted at

概要

業務でちょっとエクセルファイルを加工する機会があったので、その時の処理のうち
エクセルファイルに列を追加したり、特定の条件の行を削除する処理をまとめてみました。
テンプレートや元になるデータにをちょっと加工する必要がある時に使えるかもしれません。

必要なもの

  • python 3.7.2
  • pandas
  • numpy
  • openpyxl

今回はexeはないです。

公開場所

githubで公開しています。

使い方

  • inputディレクトリの 基準データ.xlsx に対し各種操作を行います。

  • inputディレクトリの 定義ファイル.xlsx をもとに 基準データ.xlsx の内容を修正します。

  • 各項目配下のようになっています

項番 シート名 カラム名 説明
1 追加列 項目名 基準データのカラム名に対応設定した値を
カラム名として追加する
2 追加列 追加列 基準データ指定した列に追加を行う A列から1始まりで設定する
3 追加列 追加データ 追加するデータを記載したシートを指定する。データは行の位置に対応する値を設定すること。
4 削除行 項目名 基準データのカラム名に対応設定した値を指定する。
削除する行の条件に使用するカラムを指定する。
5 削除行 条件 削除する行の条件を指定する。

ソースの説明

以下の処理が列追加処理の部分になります。
取得したファイルからカラム名、追加する位置を取得しさらにそのデータを記載しているシート
から追加するデータを取得しています。
inser_colsメソッドで指定した位置に列を追加しています。
データを取得し追加した列に値を設定しています。
また値を設定するときに罫線も引いています。

        for columninfo in addColumnInfos:
            addColumnName=columninfo[1]
            addColumnPosition=columninfo[2]
            addColumnData=columninfo[3]
            addColmunDatas=inputWorkbook.parse(addColumnData)
            addDatas=np.asarray(addColmunDatas)
            baseSheet.insert_cols(addColumnPosition,1)
            baseSheet.cell(column=addColumnPosition,row=2,value=addColumnName).border=blackBorder
            for i,data in enumerate (addDatas):
                baseSheet.cell(column=addColumnPosition,row=i+3,value=data[1]).border=blackBorder

以下の処理が行削除の部分になります。
取得したファイルから削除する条件が指定されているカラム名、削除条件を取得します。
その後削除対象の行の位置を決定後(pandasのqueryで条件を求めています)
その位置にたいして delete_rowsメソッドで削除しています。
行を削除した場合は削除した分詰まっていくので行の位置を補正しています。

        for columninfo in addColumnInfos:
            delTargetColumnName=columninfo[1]
            delRowCondition=columninfo[2]
            deleteRows=targetDeleteRowSheet.query(delTargetColumnName+'=="'+delRowCondition+'"')
            deleteIndexs=deleteRows.index

            log.info(deleteIndexs)
            for delcount,delindex in enumerate(deleteIndexs):
                
                baseSheet.delete_rows(startIndex+delindex-delcount)

活用方法

今回は適当に定義したファイルの条件をもとに削除する形をとっていますが、
例えば集計表の結果が0の行を削除する。
何らかの帳票に列を追加して提出用にするなどエクセルを加工する時の方法の一つとして使えるかもしれません。

0
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?