以前にExcelのマクロで作成したものと同じものをPythonで作成してみました。
以前の記事 → 弥生会計 年間推移表(月次推移表)を作成するExcelのマクロ(補助科目つき)
弥生会計には月次推移を確認するための画面はあります.
CSVファイルをダウンロードすると主科目の月次推移と補助科目の月次推移は別のファイルになってしまうので、それらを統合しています。
import pandas as pd
#主科目のCSVファイルの整理
val = input('file name1: ')
df1 = pd.read_csv(val,header = 6\
,encoding = 'cp932')
df1_drop = df1[(df1['分類'] == '[貸借対照表]') | (df1['[表題行]'] != '[明細行]')]
df1.drop(df1_drop.index,inplace = True)
df1.drop(df1.columns[[0,1, 2,10,17,18,20]], axis=1,inplace = True)
df1.insert(1, '補助科目', '')
#indexを仮の科目コードにして列に追加する
df1.reset_index(inplace = True,drop = True)
df1.insert(0, 'index', df1.index)
df1.insert(2, 'index2', 0)
#補助科目のCSVファイルの整理
val2 = input('file name2: ')
df2 = pd.read_csv(val2,header = 6\
,encoding = 'cp932')
df2_drop = df2[(df2['分類'] == '[貸借科目]') | (df2['[表題行]'] != '[明細行]')]
df2.drop(df2_drop.index,inplace = True)
df2.drop(df2.columns[[0,1, 2,11,18,19,21]], axis=1,inplace = True)
#indexを仮の科目コードにして列に追加する
df2.reset_index(inplace = True,drop = True)
df2.insert(0, 'index', df2.index)
df2.insert(2, 'index2', df2.index)
#2つのDataFrameを比較して勘定科目が一致していたら
#補助科目の科目コードを主科目の科目コード同じにする
for i2,col2 in zip(range(len(df2)),df2['勘定科目']):
for i,col1 in zip(range(len(df1)),df1['勘定科目']):
if col1 == col2:
df2.iat[i2,0] = df1.iat[i,0]
df1.iat[i,3] = '削除'
#2つのDataFrameを連結する
df3 = pd.concat([df1,df2])
#連結したDataFrameの整理
df3 = df3.sort_values(['index','index2'])
df3_drop = df3[df3['補助科目'] == '削除']
df3.drop(df3_drop.index,inplace = True)
df3.drop(df3.columns[[0,2]], axis=1,inplace = True)
df3.to_excel('yayoi_suii.xlsx',index = False)
file name1が 残高試算表(年間推移)のCSVファイルで、
file name2が 補助残高一覧表(年間推移)のCSVファイルです。
書き込みしたExcelのワークシートの書式については次のプログラムで調整しています。
import openpyxl
from openpyxl.styles import Font
from openpyxl.styles.borders import Border,Side
from openpyxl.utils import get_column_letter
import unicodedata
def get_east_asian_width_count(text):
count = 0
for c in text:
if unicodedata.east_asian_width(c) in 'FWA':
count += 2
else:
count += 1
return count
wb = openpyxl.load_workbook('yayoi_suii.xlsx')
ws = wb['Sheet1']
side = Side(style = None)
border = Border(top = side,bottom = side,left = side,right = side)
for row in ws.rows:
for cell in row:
cell.font = Font(name='メイリオ')
cell.number_format = '#,##0'
cell.border = border
for col in ws.columns:
max_length = 0
column_name = get_column_letter(col[0].column)
for cell in col:
if get_east_asian_width_count(str(cell.value)) > max_length:
max_length = get_east_asian_width_count(str(cell.value))
if col[0].column < 3:
adjusted_width = (max_length + 2)
ws.column_dimensions[column_name].width = adjusted_width
else:
adjusted_width = (max_length + 2) * 1.3
ws.column_dimensions[column_name].width = adjusted_width
wb.save('yayoi_suii.xlsx')