機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【openpyxl】新規Excelを作成し,計算結果を代入した後に任意の場所に保存する方法

pythonExcelを扱う

 

1. はじめに

pythonとは非常に人気のあるプログラミング言語で,既にお使いの方もたくさんいらっしゃると思います。

特にpythonはnumpyやpandas等の非常に優秀な数値計算モジュールが多く、仕事や勉強で使用している方も多いのではないでしょうか。

通常、pythonの計算結果はprint文でコンソール等に表示されます。ただしグラフ作成やデータの追加工にExcelを使用したいというニーズも多いと思います。そこで今回はExcel形式として任意の場所に保存する方法を記載します。

 ↓前の記事

www.stjun.com

 

2. コード

忙しい方やpythonのコードを自力で読んで理解できる方向けに、先にコードを載せます。動作環境はAnaconda(python3.7)です。

import numpy as np
import time
import openpyxl as px

#今日の日付・時間を取得(ファイル名に入れるため)
timestr=time.strftime("%Y%m%d-%H%M%S") #年月日時分秒の形式で取得

#新しいExcelの作成とアクティブ化
wb=px.Workbook()
ws=wb.active

#Excelシートの名前を設定
ws.title="計算結果"

#Excel一行目にどんな物理量について計算したか記載するためのリスト
list_target=["物理量A(単位)","物理量B(単位)","物理量C(単位)","物理量D(単位)","物理量E(単位)"]

#Excelの1行目に記載していく
for i in range(len(list_target)):
    ws.cell(row=1,column=i+1,value=list_target[i])

#計算結果を保存するためのリスト,今回は5つの物理量A~Eを入れるため5列の配列を作る
Result=np.empty((0,5),int)

#計算部分(ここは計算したい内容によって変える、今回は適当に数字を入れる)
for i in range(10):
    a=i
    b=i+1
    c=i+2
    d=i+3
    e=i+4
    Result=np.append(Result,np.array([[a,b,c,d,e]]),axis=0)#計算結果をさっき作った保存用の配列に入れる

#計算結果をセルに代入する(※代入は2行目から)
for i in range(len(Result)):
    for j in range(5):
        ws.cell(row=i+2,column=j+1,value=Result[i,j])

#Excelデータをデスクトップに保存する(ユーザー名にお使いのPCの名前を入れてください)
#Excelデータの名前はtest年月日時分秒.xlsx
wb.save(r"/Users/ユーザー名/Desktop/test"+timestr+".xlsx")

このコードを実行すると以下のように,デスクトップにtest+時間の名前のexcelが出現します。

f:id:stjun:20190609233227p:plain

そしてファイルを開くと以下のように計算結果が格納されています。

f:id:stjun:20190609233238p:plain

 

3 説明

3.1 必要なモジュールのインポート
import numpy as np
import time
import openpyxl as px

まず必要なモジュールをインポートします。

もしAnacondaをお使いなら既に入っているので,上記のように書くだけでOKです。

 

3.2 日付の取得
#今日の日付・時間を取得(ファイル名に入れるため)
timestr=time.strftime("%Y%m%d-%H%M%S") #年月日時分秒の形式で取得

Excelファイルの名前に入れるために日付を取得します。

こうすることでコードを実行するたびに異なる名前のExcelが作成されます。

 

3.3 Excelシートの準備
#新しいExcelの作成とアクティブ化
wb=px.Workbook()
ws=wb.active

#Excelシートの名前を設定
ws.title="計算結果"

新しいExcelを作成します、また今回はシートの名前を計算結果という名前にします。

 

3.4 Excelシートの1行目に計算する物理量や単位を代入
#Excel一行目にどんな物理量について計算したか記載するためのリスト
list_target=["物理量A(単位)","物理量B(単位)","物理量C(単位)","物理量D(単位)","物理量E(単位)"]

#Excelの1行目に記載していく
for i in range(len(list_target)):
    ws.cell(row=1,column=i+1,value=list_target[i])

計算したい物理量の名前と単位を予めリストに入れておき,for文で代入しています。

ここでrowは行、columnは列を表します。またvalueは代入したい数字や文字を表します。

 

3.4 計算を行い、計算結果をExcelに代入する
#計算結果を保存するためのリスト,今回は5つの物理量A~Eを入れるため5列の配列を作る
Result=np.empty((0,5),int)

#計算部分(ここは使用者によって変える)
for i in range(10):
    a=i
    b=i+1
    c=i+2
    d=i+3
    e=i+4
    Result=np.append(Result,np.array([[a,b,c,d,e]]),axis=0)

#計算結果をセルに代入する
for i in range(len(Result)):
    for j in range(5):
        ws.cell(row=i+2,column=j+1,value=Result[i,j])

まず計算結果を保存するために、Resultという空の配列を作成しています。

その後,計算結果を代入しています。

またaxis=0とは行方向に足していくという意味になります、今回はおまじないのようなものだと思ってください。

計算が終わったら,前回と同じように計算結果をExcelの2行目のセルから代入しています。

 

3.5 Excelファイルを保存する
#Excelファイルをデスクトップに保存する(ユーザー名にお使いのPCの名前を入れてください)
wb.save(r"/Users/ユーザー名/Desktop/test"+timestr+".xlsx")

今回はデスクトップに保存することを想定しています。

ユーザー名のところにお使いのPCの名前を入れてください。

またデスクトップ以外にも好きなディレクトリを指定することができます。

Excelファイルの名前はtest+時間になります。ここも自由に変えられます。

 

■本紹介

pythonを初めて触ろうとした時に読んだ本を紹介します。

 

 この本は、初心者に最適だと思います。確か亀を動かすゲームのようなコードが載っていたと思います。pythonをこれから始めようと思っている人は読んでみて下さい。

また下の入門python3も良い本だと思いますが、分厚いので中々根気が必要です。個人的には最小限必要なことが書いてある薄い本を読み、必要になってからちょっとずつ知識を増やしていくのが良いと思います。

また何度も紹介しますが、以下のニューラルネットワーク自作入門は非常に良い本です、pythonの書き方から記載されているのでいきなり読んでも大丈夫だと思います。

 とりあえず基本的なコードの書き方さえ分かってしまえば、後はネットで知りたい情報にアクセスする方が早いと思います。

 

4. 最後に

pythonExcelファイルを操作できるようになると,結果の保存や共有が非常に楽になります。

ぜひ活用してみて下さい。

 ↓次の記事

www.stjun.com