NCVCの作者のページ

Python プロセスシート(帳票作成)

Python版プロセスシート(帳票作成マクロ)

 著書『いまからはじめるNC工作 第2版』p.47 図2.25 で少しだけ触れています. 実際,Excelで作られた 帳票作成マクロ(ページ一番下) もダウンロードできるようにしてありますが, Excelのマクロって社内などの仲間うちで使うには良いんですが,ネットからダウンロードするマクロって怖いイメージがありますよね. これをPythonで作ってみました.ソースがオープンになっているので,安心して使えると思います.


import sys
import os
import re
import pandas as pd

## 使い方
## python procsheet.py sample.ncd [sample.xlsx]
## 最後の出力ファイル名は省略可.省略すると 入力ファイル.xlsx で出力されます

## 引数処理
inFile=open(sys.argv[1])
outFile=os.path.splitext(sys.argv[2 if len(sys.argv)>2 else 1])[0]+'.xlsx'
#print(outFile)

## 無視する行とワード処理する正規表現
reg_ignore = re.compile(r'^%|\(.*?\)|[\r\n]$')
reg_progno = re.compile(r'O\d+')
reg_word   = re.compile(r'[A-Z/]-?\d*\.?\d*')

## プロセスシートの列をDataFrameで作成
col = ['/','N','G','X','Y','Z','R/I','J','K','F','S','T','M','H/D','L','P','Q']
df = pd.DataFrame(index=[], columns=col)

prog=''     ## O番号
## 1行(ブロック)ずつ処理
with open(inFile) as f:
    for line in f:
        ## 先頭の%とカッコ内のコメントと行末の改行は''に置換
        line = reg_ignore.sub('', line)
        if len(line)==0:
            continue
        ## プログラム番号
        wordlist = reg_progno.findall(line)
        for word in wordlist:
            prog += word + ' '
        ## ブロックをワードごとに分割
        dic = {}
        wordlist = reg_word.findall(line)
        for word in wordlist:
            ## ワードの先頭1文字をキーに各列に文字列を追加
            w = word[:1]
            if w=='R' or w=='I':
                w = 'R/I'
            elif w=='H' or w=='D':
                w = 'H/D'
            elif w=='O':    ## O番号は列として登録しない
                continue
            dic[w] = (dic.get(w) or '') + word
        ## DataFrameに1行追加
        df = df.append(dic, ignore_index=True)

#print(df)
df.to_excel(outFile, index=False, startrow=4)   ## 4行空けて出力

procsheet.py
(実際のコードは罫線などの飾り付けも含まれます)

これを実行すると,以下のようなExcelファイルが出力されます.


暗号のような正規表現のところだけ解説を加えます.
まず reg_ignore = re.compile(r'^%|\(.*?\)|[\r\n]$') のところ.

次に reg_word = re.compile(r'[A-Z/]-?\d*\.?\d*') のところ.

これで1つのワードにマッチします.

あとは煮るなり焼くなり好きに使ってください.NCVC本体インストーラに同梱予定です.

<< 前のページに戻る