はらさんの備忘録

自分のための備忘録的なもの

pythonによるexcelファイル操作

エクセル記載のレジスタネームと値を所定のフォーマットにして出力するため実施した

エクセルファイルの読み込み

openpyxlを使用した。
今回はかんたんな操作だけだったので、opoenpyxlで良いかと。複雑になればpandasとか使えばいいのでは


load_workbook()でinputファイルを選択
該当シートは上記で選択したファイル名['シート']で選択可能

load_workbook(r'reg_setting.xlsx')
sheet = workbook['Sheet1']

あとは、
sheet.cell(row=xx , column=yy).value
でほしいセルの値をとってくることが可能
.valueを抜かしていて、cell自体のrow, column情報しかとってこれず、一瞬ハマったので注意

numpy arrayを使ってネームと値を格納しているが、
ネームに関してはdtype=strではうまく行かなそうなので、objectを指定。

ファイル出力

ついでに、記載

with open(file_name, "w") as outfile:
    outfile.write(r'regname=%s:regvalue=set(%d)' % (reg_name[i], reg_value[i]) + '\n')

with open(file, "w") as outfile:
とすることで、ファイル書き込み終了時の終了の記載が必要なくなる。
あとは.write()で書き込み。withなので閉じなくてOK

以下備忘コード

#!/usr/bin/env python
# coding: utf-8

import openpyxl as ox
import numpy as np

########file setting parameter#########

####input file#######
workbook = ox.load_workbook(r'reg_setting.xlsx')
sheet = workbook['Sheet1']

##data range
row_range = np.arange(4, 13, 1)
reg_name_column  = 3
reg_value_column = 4

####output file######
file_name = 'reg_set_REGOUT.sv' #file directory below

#####excel file read

reg_name = np.array([], dtype=object)
reg_value = np.array([], dtype=int)

for i in row_range:
    reg_name = np.append(reg_name, sheet.cell(row=i, column=reg_name_column).value)
    reg_value = np.append(reg_value, sheet.cell(row=i, column=reg_value_column).value)

####write reg_setting to outputfile####
with open(file_name, "w") as outfile:
    for i in range(len(reg_name)):
        outfile.write(r'regname=%s:regvalue=set(%d)' % (reg_name[i], reg_value[i]) + '\n')