不定期戯言

戻る

2019.01.19 (Sat)

表の結合

・生徒のLT大会が終わったので,評価シートをマージしなくてはいけない。LibreOffice calcの表をそのまま全員分貼り合わせればいいのだが,こんなの手作業でやりたくない。最近Pythonを勉強中なので,それを使ってざくっとコードを書いてみた。odfpyモジュールを使ってみたが,肝心の表読み出しのところが少し面倒だった。

import pathlib
from odf import number,text,table,opendocument

doc = opendocument.OpenDocumentSpreadsheet()
tbl = table.Table(name="評価シート")

p = pathlib.Path(".")

for f in p.glob("2018*.ods"):
    d = opendocument.load(str(f))
    tables = d.spreadsheet.getElementsByType(table.Table)
    for t in tables:
        for r in t.getElementsByType(table.TableRow):
            row = table.TableRow()
            tbl.addElement(row)
            for c in r.getElementsByType(table.TableCell):
                cells = 1
                repeat = c.getAttribute("numbercolumnsrepeated")
                vt = c.getAttribute("valuetype")
                if repeat:
                    cells = int(repeat)
                while cells > 0:
                    cell = table.TableCell(value=c, valuetype=vt)
                    cell.addElement(text.P(text=c))
                    row.addElement(cell)
                    cells -= 1

doc.spreadsheet.addElement(tbl)
doc.save("merge",True)

(こっそり修正)

コメント(0)

コメントの受付は終了しました。