美容室用のPOSレジでSALONPOSという製品があります。
SALONPOSから出力できる総合売上月報のデータを元にして弥生会計に取り込むための売上データをPythonを使って作成しました。
プログラムは以下のようなものです。
import pandas as pd
import openpyxl
df = pd.read_csv('総合売上月報20200101_20200630.csv',encoding='cp932',header = 6,\
skipfooter=2,engine='python')
df.to_excel('temp.xlsx')
#技術売上のデータ作成
df_uriage_g = pd.DataFrame(index = df.index \
, columns=['A','B','C','D','E','F','G','H','I'\
,'J','K','L','M','N','O','P','Q','R','S','T'\
,'U','V','W','X','Y'])
#要素の転記
df_uriage_g['A'] = 2000
df_uriage_g['B'] = ''
df_uriage_g['C'] = ''
df_uriage_g['D'] = '2020/' + df['Unnamed: 0'].str[0:2] + '/' + df['Unnamed: 0'].str[3:5]
df_uriage_g['E'] = '現金'
df_uriage_g['F'] = ''
df_uriage_g['G'] = ''
df_uriage_g['H'] = '対象外'
df_uriage_g['I'] = df['売上.1']
df_uriage_g['J'] = 0
df_uriage_g['K'] = '技術売上'
df_uriage_g['L'] = ''
df_uriage_g['M'] = ''
df_uriage_g['N'] = '課税売上込10%'
df_uriage_g['O'] = df['売上.1']
df_uriage_g['P'] = 0
df_uriage_g['Q'] = '本日売上高'
df_uriage_g['R'] = ''
df_uriage_g['S'] = ''
df_uriage_g['T'] = 0
df_uriage_g['U'] = ''
df_uriage_g['V'] = ''
df_uriage_g['W'] = 0
df_uriage_g['X'] = 0
df_uriage_g['Y'] = 'no'
df_uriage_g.to_excel('temp_g.xlsx')
df_uriage_g[(df_uriage_g['I'] != '-') & (df_uriage_g['I'] != '0')].to_csv('py_uriage.csv',\
encoding = 'cp932',header = False,index = False)
#商品売上のデータ作成
df_uriage_s = pd.DataFrame(index = df.index \
, columns=['A','B','C','D','E','F','G','H','I'\
,'J','K','L','M','N','O','P','Q','R','S','T'\
,'U','V','W','X','Y'])
#要素の転記
df_uriage_s['A'] = 2000
df_uriage_s['B'] = ''
df_uriage_s['C'] = ''
df_uriage_s['D'] = '2020/' + df['Unnamed: 0'].str[0:2] + '/' + df['Unnamed: 0'].str[3:5]
df_uriage_s['E'] = '現金'
df_uriage_s['F'] = ''
df_uriage_s['G'] = ''
df_uriage_s['H'] = '対象外'
df_uriage_s['I'] = df['売上.2']
df_uriage_s['J'] = 0
df_uriage_s['K'] = '商品売上'
df_uriage_s['L'] = ''
df_uriage_s['M'] = ''
df_uriage_s['N'] = '課税売上込10%'
df_uriage_s['O'] = df['売上.2']
df_uriage_s['P'] = 0
df_uriage_s['Q'] = '本日売上高'
df_uriage_s['R'] = ''
df_uriage_s['S'] = ''
df_uriage_s['T'] = 0
df_uriage_s['U'] = ''
df_uriage_s['V'] = ''
df_uriage_s['W'] = 0
df_uriage_s['X'] = 0
df_uriage_s['Y'] = 'no'
df_uriage_s.to_excel('temp_s.xlsx')
#csvファイルに書き込み
df_uriage_s[(df_uriage_s['I'] != '-') & (df_uriage_s['I'] != '0')].to_csv('py_uriage.csv',\
mode = 'a',encoding = 'cp932',header = False,index = False)
Pythonを使って、元になるcsvファイルから会計ソフトにデータを入力するためのcsvファイルを作成するためのパタンは今のところ次のようなものです。
1.元になるcsvファイルをDataFrameに取り込む。
この際に、データの何行目から何行目までを取り込むのかに注意します。
今回のデータの場合では7行目から取り込めば良いのでheader = 6を指定しています。
また、データの末尾には空白の行があり、末尾から2番目には合計の行があるので、skipfooter=2を指定してこれらの行を除外しています。
2.データの転記用に空のDataFrameを作成する。
元になるcsvファイルを取り込んだDataFrameと同じ行数のDataFrameを作成するので、index = df.indexを指定しています。
弥生会計の入力用データの列数は25なので、columns=[‘A’,’B’,・・・,’X’,’Y’]でA列からY列を指定しています。
3.データを転記する
転記先のDataFrameの列に入力する内容を弥生会計の入力用データの形式に合わせて指定します。
転記元のDataFrameの列の要素を df[‘Unnamed: 0’] 、df[‘売上.1’] といった形で指定することができます。(’Unnamed: 0’、’売上.1’といった列の名前はcsvファイルをDataFrameに取り込んだ際に自動的に付けられた名前です)
今回のデータでは日付の書き方が ”01月04日(土) 曇” といったものであったため、計算式を使って ”2020/01/04″ という形式に変更しています。
4.必要なデータのみをcsvファイルに書き出す。
転記を行った結果、df_uriage_g[‘I’] (転記元の df[‘売上.1’])が “0” 又は “-” になっている行ができます。
これらの行は不要であるため、これらの行以外のデータ
df_uriage_g[(df_uriage_g[‘I’] != ‘-‘) & (df_uriage_g[‘I’] != ‘0’)]
をcsvファイルに書き出します。
header と index は不要なため、header = False,index = Falseを指定します。
今回のデータでは元のcsvファイルの同じ行に「技術売上」と「商品売上」の2つの売上データがあるため、技術売上でデータの転記とcsvファイルへの書き出し、商品売上でデータの転記とcsvファイルへの書き出しというように2段階でおこなっています。
2回目のcsvファイルの書き出しの際に、mode = ‘a’ を指定して追記モードにしています。