ネ申 エクセル


ネ申エクセル(別名エクセル方眼紙)と付き合うことが激増してきた。

from os import chdir
from pathlib import Path
import xlwings as xw

xw.App() if len(xw.apps) == 0 else None # Excelが開いてなければ開いておく

#%% ディレクトリ直下の複数ファイルを処理する場合
chdir("some-directry")
folder = Path("./")
files  = [x for x in folder.iterdir() if x.is_file() and "xlsx" in x.name]
for file in files:
    wb = xw.books.open(file)
    # 他のブックを閉じる
    # 最後のブックを閉じるとアプリは終了せず制御ができなくなるため一つは残す
    [x.close() for x in xw.books if x != wb]
    # シートを指定する
    ws = wb.sheets[0]
    # 名前で指定しても良い
    # ws = wb.sheets["Sheet1"]

#%% 読み取り・書き込み
    # single cell
    ws[0,0].value = "A1"
    # trivial
    ws[0,0] == ws.range(1,1) == ws.range("A1")

    # multiple cells
    ws.range("A1:D10").value = "Foo"
    # another way
    row0,col0 = ws.range("A1").row,  ws.range("A1").column
    row1,col1 = ws.range("D10").row, ws.range("D10").column
    ws.range((row0,col0), (row1, col1)).value = "Bar"

#%% セルの状態
    # is merged?
    ws.range("A1").merge_cells
    # >>> True or False 
    # cell color
    ws.range('A1').color  = (120,120,255)
    ws.range('A1').color  = None
    # '#{:02x}{:02x}{:02x}'.format(r, g, b) rgb to hex

#%% 数値
# 数値が文字列として保存されている場合等には注意を要する
# またFloatの仕様も意識する必要がある

    A1 = ws.range("A1").value = 1.6
    A2 = ws.range("A2").value = 0.1
    ws.range("A3").value = A1 + A2 # A3 -> 1.6 + 0.1
    ws.range("A3").value == 1.7 # False
    ws.range("A3").value # --> 1.7000000000000002

    # Decimalを使用するとよい
    from decimal import Decimal,ROUND_CEILING
    A1 = ws.range("A1").value = 1.6
    A2 = ws.range("A2").value = 0.1
    A3 = Decimal(str(A1)) + Decimal(str(A2))
    # これはダメ
    # Decimal(A1) + Decimal(A2)
    # >>> Decimal('1.700000000000000094368957093')
    # 桁数を保持したい場合には文字列で保存するのが手っ取り早い(スマートではないけど)
    ws.range("A3").value = "'" + str(A3.quantize(Decimal('1.00'),rounding=ROUND_CEILING))

ネ申エクセル最高!
んな訳あるか!!
でもW〇rdや、P〇werP〇intよりプログラマブルな点マシか。

もどる


かもめ - Make / Walk / Others / About