LINE2020.09.27この記事ではPythonでExcelファイルを操作できるopenpyxlを簡単に紹介します。VBAがよく候補になります。Pythonでもopenpyxlというライブラリを用いれば、Excelの作業を自動化することができます。PythonでExcelの作業を自動化するメリットとして、Pythonのデータ処理に長けた強力なライブラリ等の多くのライブラリを利用できる点やPythonの強力な表記方法を利用できる点があります。Pythonのプログラミング言語として学びやすく、実用面としても用途によっては十分にVBAの代わりができます。この記事で、利用しているOS・Python・openpyxlのバージョンは以下の通りになります。installでopenpyxlを指定することで簡単にインストールできます。openpyxlExcelファイルの作成ワークブックの作成はopenpyxlからWorkbookをインポートし、Workbook()でWorkbookオブジェクトを作成できます。Workbookオブジェクトからcreate_sheet()を用いることでワークシートの作成できます。Workbookオブジェクトのcopy_worksheet()を用いることでワークシートをコピーできます。Worksheetオブジェクトのtitleプロパティを変更することでシート名を変更できます。Workbookオブジェクトのsave()を用いることで、Excelファイルの保存ができます。以下のコードはopenpyxlのチュートリアルとほぼ同じになります。"Change_Title"print(wb.sheetnames)wb.save('excel_create.xlsx')実行すると以下のようにワークシートが作成されます。print文では以下のように、ワークシートの名前が出力されます。Copy']データの挿入ワークシートのセルへのデータ挿入はいくつか方法があります。ws.cell(行の位置,列の位置,値)で値をセットする方法があります。range(1,6):ws.cell(row,col,"Row"+str(row)+"-"+"Col"+str(col))wb.save('excelfile_insertdata.xlsx')データが挿入されたExcelファイルは以下のようになります。データのロード既存のExcelファイルをロードするにはload_workbookをインポートしてから、Excelファイルのファイルパスを指定します。column=col).value)ロードされるExcelファイルは以下のようなものを利用します。Excelファイルがロードされると、print文で以下のように出力されます。画像の挿入をしたい場合は、openpyxl.drawing.imageからImageをインポートします。Image()で挿入したい画像のファイルパスを指定します。画像の大きさはheightやwidthのプロパティで変更できます(px単位)。その後に、Worksheetオブジェクトからadd_image()で画像を挿入できます。Image("PC_image.jpg")img.height=200img.width=250ws.add_image(img,"B2")wb.save("excelfile_image.xlsx")実行すると以下のような画像が挿入されたExcelファイルを作成できます。グラフの挿入グラフを挿入したい場合はopenpyxl.chartから利用したいグラフをインポートします。ここでは棒グラフを使用するため、BarChartをインポートします。範囲を参照するためにReferenceもインポートします。Reference(range_string=)を利用するとworksheet名から始まるExcelで利用する範囲の文字列で、範囲の参照を行うことができます。Reference(worksheet=ws,min_col=,max_col,min_row,max_row)を利用するとWorksheetオブジェクトで範囲における列の最小と最大の列番号と行の最小と最大の行番号を指定して、範囲の参照を行うことができます。(表の中で番号はそれぞれ1から始まります。1行目の番号は1、1列目の番号は1)その後、グラフオブジェクトのadd_data()で値を入れ、Worksheetオブジェクトのadd_chart()で指定した場所にグラフを入れることができます。BarChart()chart.add_data(values)ws.add_chart(chart,"C2")wb.save("excelfile_graph.xlsx")グラフが挿入されたExcelファイルは以下のようになります。openpyxlでPandasを利用Pythonには、データ処理のライブラリとして、Pandasがあります。openpyxlではPandasのデータフレームを利用することができます。pandasのインストールは以下のコマンドでできます。pandasPandasを利用するためにpandasをインポートします。pandasのデータフレームをExcelの行に変換するために、openpyxl.utils.dataframeからdataframe_to_rowsをインポートします。[None])で空行を抜く処理を入れています。openpyxlでセルのスタイルで"Pandas"というスタイルがあるため、ヘッダー行とインデックス列を"Pandas"というスタイルに変更しています。"Pandas"wb.save("excelfile_pandas.xlsx")実行してExcelファイルを作成すると以下のようになります。openpyxlで簡単なアンケートデータの集計を行なってみるもう少し実用的な例として、アンケートデータ集計のExcelファイルを作成したいと思います。女,49,兵庫県...後から、選択肢が4つある、3つのアンケートにランダムに答えたと仮定したデータをつけ足して、アンケートデータとします。出力するExcelファイルには、アンケートデータのシートアンケート1の集計結果のシートアンケート2の集計結果のシートアンケート3の集計結果のシートを作成します。都道府県別の選択肢の回答数をそれぞれ表にして、さらにグラフにしたものとします。上の内容の実装例として、ソースコードの全体を紹介して、そのあとで部分的に解説を行いたいと思います。コーディングが拙い部分もあると思いますが、ご了承ください。出力結果のグラフも環境によってはグラフ同士が重なったりと、表示がうまくいかない場合もあるかもしれません。"__main__":main()出力結果として出来上がるExcelファイルは以下のようになります。アンケートデータ集計結果の図(一部)集計結果の図(全体図)それぞれの機能の集計結果の計算方法アンケートの集計結果で、内容と上記のソースコードの関数での対応は以下のようになります。prefectures_count_graph()それぞれの集計結果の計算方法は主にPandasのDataFrameを用いて計算しています。データフレームに比較演算子を用いると以下のような結果が得られます。df[0]).sum())2Trueの数を得られます。複数の条件で行いたい場合は、条件を'&'(andの意味)や'|'(orの意味)や'~'(notの意味)を用いることができます。9)).sum())基本的にこの方法で集計結果を得られます。年齢別の回答人数(answer_age_graph)では少し、変わった計算の仕方をしています。df[colname])中間にある方法は、Pythonの内包表記で、さらに2つの要素を取り出して、それぞれの年齢の比較を行っています。以下は2つの要素を取り出して、どのような値が出力されるかの様子です。'60,70']表の記入方法について表は辞書型のデータ構造を利用して、記入されます。値,...},列番地2:...}のように保存されます。することで、表の記入を行うときにループで記入を行うことができます。v)グラフの目盛りのオートスケール計算グラフのオートスケールの計算は検索してもなかなか出てこなかったので、自作したものになります。2))-1))グラフの目盛りの計算は、グラフでの最小値と最大値で求めます。グラフの最小値と最大値はグラフの幅を計算するために用います。今回の例では、グラフの最小値は0で固定されているので、グラフの最大値を表のデータ構造に保存するときに変数(max_v)に記憶しておきます。5の倍数を用いた計算方法を考えます。ここで、例えば、グラフの目盛りを付ける場合、最低でも(グラフの幅/2)の部分でグラフの目盛りをつけたいです。グラフの幅10のグラフに対して、(グラフの幅/2)は5となり、5のところにつけられそうです。グラフの幅9のグラフに対して、(グラフの幅/2)は4(小数切り捨て)となり、1,2,5のどれかを使うとすると2が妥当と考えます。同様に続けて、3のグラフに対して、(グラフの幅/2)は1(小数切り捨て)となり、1が妥当と考えます。上位の桁が1の場合は、5の倍数を一番上位の桁が2,3の場合は、1の倍数をそれ以外は2の倍数になります。グラフの目盛りに使う数字はおおまかに決まったので、次はその数字の桁数について考えます。扱う数字は正の整数で、とりあえず1000という数字について考えてみます。1000につける目盛りは500にしたいので、5に100倍した数値になるだろうと考えます。(グラフの幅/2)は500で、3桁あります。10のべき乗を考えて、10の(グラフの幅/2)の桁数-1乗で桁数も良いだろうと考えます。同様に900や300で考えても、その数値は目盛りとしては使えそうなのでプログラムで記述したものになります。2の倍数の目盛りを計算する場合は、グラフの幅の桁数は(グラフの幅/2)にしても桁が落ちることがないのでわざわざ(グラフの幅/2)を計算する必要はありません。今回の例で用いたグラフの設定は以下のような意味になります。凡例まとめアンケートデータの集計プログラムはcsvファイルを入力として、Excelファイルを出力できます。csvファイルから集計結果の表やグラフなども自動で作成できます。このプログラムの改善点はコマンドライン引数から入力ファイルや出力ファイルを指定できるようにする等、多々ありますが、このようにPythonを使用してopenpyxlでのExcelの作業の自動化は十分効果的だと思います。Excelの作業の自動化は基本的にVBAが選択肢になりますが、Pythonも検討する価値があると思います。Excelでフォームコントロールを使用したい場合はVBAが選択肢になると思いますが、単純な作業の自動化はVBAよりPythonの方が書きやすく、良いと感じます。テキストの置換や編集をするsedコマンドは、主にテキストにある文字列を別の文字列に置換することによく使われます。テキスト編集などにとても便利なコマンドでぜひ覚えておきたいコマンドのひとつです。ファイルのタイムスタンプを変更するtouchコマンドは、ファイルのタイムスタンプを変更するコマンドです。実際には空ファイルの作成に用いる場合のほうがとても多いコマンドです。ユーザIDやグループIDを表示するidコマンドは指定したユーザのユーザIDやグループIDを確認できます。ユーザが指定されていない場合はこのidコマンドを実行しているプロセスのユーザIDやグループIDを確認できます。LinuxコマンドのノウハウLinuxのリダイレクトについて確認するシェルでは、実行するコマンドに対して'>'や'<'等のリダイレクト演算子を追加するとコマンドの入力元や出力先を変更することができます。これをリダイレクトまたはリダイレクション(redirection)といいます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。Linuxコマンド.NET.。