2020年2月27日木曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、12章(Excelシート)、12.14(演習プロジェクト)、12.14.5(スプレッドシートからテキストファイルに変換する)の解答を求めてみる。

コード

#!/usr/bin/env python3
import openpyxl

wb = openpyxl.load_workbook('files.xlsx')
sheet = wb.active

for row in range(1, sheet.max_row + 1):
    with open(f'sample5_{chr(ord("a") + (row - 1))}.py', 'w') as f:
        for cell in sheet[row]:
            if cell.value is not None:
                print(cell.value, file=f, end='')

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./spressheetToText.py 
% cat sample5_a.py 
#!/usr/bin/env python3
import argparse
import os
import openpyxl
from openpyxl.cell.cell import get_column_letter
from openpyxl.styles import Font


print('1.')
parser = argparse.ArgumentParser()
parser.add_argument('number',  type=int)
args = parser.parse_args()
n = args.number
wb = openpyxl.Workbook()
sheet = wb.active
font_obj = Font(bold=True)

for row in range(1, n + 2):
    for col in range(1, n + 2):
        if row == col == 1:
            continue
        col_str = get_column_letter(col)
        cell = sheet[f'{col_str}{row}']
        if row == 1:
            cell.font = font_obj
            cell.value = col - 1
        elif col == 1:
            cell.font = font_obj
            cell.value = row - 1
        else:
            cell.value = (row - 1) * (col - 1)

wb.save('multiplicationTable.xlsx')
% diff sample5_a.py multiplicationTable.py
% diff sample5_b.py blankRowInserter.py 
% diff sample5_c.py swap.py 
% 

0 コメント:

コメントを投稿