目的
openpyxlでグラフ挿入しつつ、グラフの途中で改ページされないようにしたい
ググった
- 一番最初に参考にした記事(このままだと動かない)
from openpyxl import Workbook
from openpyxl.worksheet.pagebreak import Break
wb = Workbook()
ws = wb.active
row_number = 20 # the row that you want to insert page break
page_break = Break(id=row_number) # create Break obj
ws.page_breaks.append(page_break) # insert page break
結論
ws.page_breaks[0].append(page_break)
で解決できます。
ドキュメントを確認
- ws.page_breaksを調べる
- https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/worksheet/worksheet.html
- どうやらpage_breaksはリストのよう。だからappend使えてたのね。
class Worksheet(_WorkbookChild):
...
def _setup(self):
self.row_breaks = RowBreak()
self.col_breaks = ColBreak()
self.page_breaks = [self.row_breaks, self.col_breaks]
...
- Rowbreak, ColBreakを調べる
- https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/worksheet/pagebreak.html#PageBreak
-
brk = Sequence(expected_type=Break, allow_none=True)
- Breakはここに追加すれば良いみたい
-
def append(self, brk=None): ...
- PgaeBreak.append(Break)で追加されるっぽい
→ws.page_breaks[0].append(page_break)
やん
- PgaeBreak.append(Break)で追加されるっぽい
class PageBreak(Serialisable):
tagname = "rowBreaks"
count = Integer(allow_none=True)
manualBreakCount = Integer(allow_none=True)
brk = Sequence(expected_type=Break, allow_none=True)
__elements__ = ('brk',)
__attrs__ = ("count", "manualBreakCount",)
def __init__(self,
count=None,
manualBreakCount=None,
brk=(),
):
self.brk = brk
def __bool__(self):
return len(self.brk) > 0
__nonzero__ = __bool__
def __len__(self):
return len(self.brk)
@property
def count(self):
return len(self)
@property
def manualBreakCount(self):
return len(self)
def append(self, brk=None):
"""
Add a page break
"""
vals = list(self.brk)
if not isinstance(brk, Break):
brk = Break(id=self.count+1)
vals.append(brk)
self.brk = vals
RowBreak = PageBreak