3
11

More than 3 years have passed since last update.

Excel X Python最速仕事術の仕事術

Last updated at Posted at 2019-12-29

VBAの時代は終わったらしい

最近「Excel X Python最速仕事術」という本が2019年12月末時点で売れていてAmazonの表計算の書籍ランキングなどで1位を獲得しています。あのExcel最強の教科書より売れているのだからすごいです!(表計算のカテゴリはかなり人気があるカテゴリです)
Amazonリンク

その最速仕事術っていったいどういったものかというとPythonからExcelのVBAみたいなことをするというのがこの本の核心です。今回は自分の学びのため、この本から学んだPythonからExcelっブックを操作してVBAっぽいことをする方法を紹介させていただきます。

この本では一貫してopenpyxlというライブラリを使用しExcel操作をしています。

ワークブックを読み込む。(新規のワークブック)

import openpyxl
lwb = openpyxl.Workbook()
lsh = lwb.active #セルへの書き込みのためにシートを読み込む

既に作成されているExcelを読み込む

import openpyxl
wb = openpyxl.load_workbook('ファイル名.xlsx')

ドキュメントを保存する

import openpyxl
wb = openpyxl.load_workbook('ファイル名.xlsx')
wb.save(filename = 'sample_book.xlsx')

セルに書き込む

import openpyxl
lwb = openpyxl.Workbook()
lsh = lwb.active #セルへの書き込みのためにシートを読み込む
lsh.cell(行数,列数).value = "hogehoge"

チャートを使う(ラインチャート)

引用元のコードを載せておきます
引用元のリンク

from datetime import date

from openpyxl import Workbook
from openpyxl.chart import (
    LineChart,
    Reference,
)
from openpyxl.chart.axis import DateAxis

wb = Workbook()
ws = wb.active

rows = [
    ['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
    [date(2015,9, 1), 40, 30, 25],
    [date(2015,9, 2), 40, 25, 30],
    [date(2015,9, 3), 50, 30, 45],
    [date(2015,9, 4), 30, 25, 40],
    [date(2015,9, 5), 25, 35, 30],
    [date(2015,9, 6), 20, 40, 35],
]

for row in rows:
    ws.append(row)

c1 = LineChart()
c1.title = "Line Chart"
c1.style = 13
c1.y_axis.title = 'Size'
c1.x_axis.title = 'Test Number'

data = Reference(ws, min_col=2, min_row=1, max_col=4, max_row=7)
c1.add_data(data, titles_from_data=True)

# Style the lines
s1 = c1.series[0]
s1.marker.symbol = "triangle"
s1.marker.graphicalProperties.solidFill = "FF0000" # Marker filling
s1.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline

s1.graphicalProperties.line.noFill = True

s2 = c1.series[1]
s2.graphicalProperties.line.solidFill = "00AAAA"
s2.graphicalProperties.line.dashStyle = "sysDot"
s2.graphicalProperties.line.width = 100050 # width in EMUs

s2 = c1.series[2]
s2.smooth = True # Make the line smooth

ws.add_chart(c1, "A10")

from copy import deepcopy
stacked = deepcopy(c1)
stacked.grouping = "stacked"
stacked.title = "Stacked Line Chart"
ws.add_chart(stacked, "A27")

percent_stacked = deepcopy(c1)
percent_stacked.grouping = "percentStacked"
percent_stacked.title = "Percent Stacked Line Chart"
ws.add_chart(percent_stacked, "A44")

# Chart with date axis
c2 = LineChart()
c2.title = "Date Axis"
c2.style = 12
c2.y_axis.title = "Size"
c2.y_axis.crossAx = 500
c2.x_axis = DateAxis(crossAx=100)
c2.x_axis.number_format = 'd-mmm'
c2.x_axis.majorTimeUnit = "days"
c2.x_axis.title = "Date"

c2.add_data(data, titles_from_data=True)
dates = Reference(ws, min_col=1, min_row=2, max_row=7)
c2.set_categories(dates)

ws.add_chart(c2, "A61")

wb.save("line.xlsx")

複数のExcelを読み込む

import openpyxl
import pathlib
path = pathlib.Path('ディレクトリ名/')
for path_obj in path.iterdir():
    wb = openpyxl.load_workbook('ファイル名.xlsx')
    for sh in wb:
        #シートごとの操作

更新履歴

  • 2019/12/30 新規作成
3
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
11