辞書形式に読み込みたいということで、以下のような入力・出力を想定してコードを作成しました。
<入力>
No. 項目1 項目2 項目3
1 10 20 30
2 40 50 60
3 70 80 90
<出力>
{'項目1': {1: 10, 2: 40, 3: 70}, '項目2': {1: 20, 2: 50, 3: 80}, '項目3': {1: 30, 2: 60, 3: 90}}
実行環境は以下のとおりです。
・言語:python3
・OS:windows10
・エディタ:jupyter notebook
・読み込み用excelファイル:xlsx拡張子()
<コード>
import openpyxl
f=openpyxl.load_workbook('test.xlsx')
active_sheet=f.active
dict={}#事前に空の辞書を定義
###行の終わりを検索
count=1
while(1):
if active_sheet.cell(row=count,column=1).value == None:#セルの中身が空白ならば
row_end=count-1#行の終わりを取得
break#取得したらwhile文を抜ける
count+=1
###列の終わりを検索
count=1
while(1):
if active_sheet.cell(row=1,column=count).value==None:#セルの中身が空白ならば
col_end=count-1#列の終わりを取得
break
count+=1
###セルの読み込み・辞書への挿入
for c in range(1,col_end):#列に関するfor文
item=active_sheet.cell(row=1,column=c+1).value#項目の読み込み
dict[item]={1:0}#事前にキーを作っておかないとエラーになる
for r in range(1,row_end):#行に関するfor文
num=active_sheet.cell(row=r+1,column=1).value#番号の読み込み
valu=active_sheet.cell(row=r+1,column=c+1).value#数値の読み込み
dict[item][num]=valu#辞書に番号・数値を挿入
print(dict)
読み込むファイル(表)の大きさが異なる場合を想定して、行終わり・列終わりの検索を加えています。コード的に冗長なので、表の大きさが一定ならば消してもらって構いません。
各セル内容の読み込みについては、以下のコードからできます。
num=active_sheet.cell(row='行番号',column='列番号').value#番号の読み込み
その他、openpyxlを使った基本的なエクセル操作については以下のリンクをご参照ください。
Qiita:【Python】OpenPyXLでExcelを自動操作する
また、R.Shigemori氏の言う通り、Pandasを使ってエクセルを操作する方法もあります。詳しくは以下のリンクをご参照ください。
Qiita:まだExcelで消耗してるの?Pythonによる自動集計ガイド 基礎編
以上、長文になりましたが、ご参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/09 13:05