def test_x_findelement(testtree): from docxx.oxml.ns import nsmap assert find_element(testtree.find("w:section", nsmap), query("w:grid", x="20")) is testtree.find( "w:section/w:grid", nsmap) assert find_element(testtree.find("w:p", nsmap), query("w:r")) is not None assert find_element(testtree, query("w:body")) is None
def test_x_copyelement(testtree): from docxx.oxml.ns import qn, nsmap root2 = etree.Element(qn("w:body")) copy_element(root2, testtree, query("w:p")) move_element(root2, testtree, query("w:section")) assert len(root2.find("w:p", nsmap)) == 3 assert find_element(root2.find("w:section", nsmap), query("w:grid", x="20")) is not None assert len(testtree.find("w:p", nsmap)) == 3 assert find_element(testtree, query("w:section")) is None
def minimize_dimension(self): # セルと行の数を調べ、最小限の寸法を決める lastrowref = None lastrowoffset = 0 for row in self.rows: empty = True for cell in row.cells: if not cell.empty: # 空文字列であっても要素が存在する場合は偽とする empty = False break if empty: break lastrowref = row.ref lastrowoffset += 1 if lastrowref is None: return # ディメンジョンの修正 dim = self._element.dimension if dim is not None: dim.ref = modify_range_ref(dim.ref, tailrow=lastrowref) # 空の行を削除 for elem in self._rows[lastrowoffset:]: remove_element(self._element.sheetData, query(elem))
def test_x_dupelement(testtree): from docxx.oxml.ns import nsmap elem = find_element(testtree.find("w:p", nsmap), query("w:r")) assert elem is not None elem4 = dup_element_next(elem) elem4.text = "Onion" elem5 = dup_element_previous(elem) elem5.text = "Tomato" assert [x.text for x in testtree.find("w:p", nsmap) ] == ["Tomato", "Apple", "Onion", "Banana", "Orange"]
def compose_docx(base=None, template=None): """ Create an empty new document from base document or template document """ if base is not None: newdocx = deepcopy(base) newdocx.document._body.clear_content() else: newdocx = open_docx() newbody = newdocx.document._element.body if template: templbody = template.document._element.body # テンプレート文書から最初のセクションの要素をコピーする # 頁判型・頁余白・行数・行文字数・文字列方向 remove_element(newbody, query("w:sectPr")) srcsection = templbody.get_or_add_sectPr() destsection = newbody.get_or_add_sectPr() copy_element(destsection, srcsection, query( "w:pgSz", "w:pgMar", "w:cols", "w:textDirection", "w:docGrid" )) # TODO: テンプレート文書からヘッダー・フッターをコピーする。 else: """ # 一から空のファイルをつくる sec = newdocx.document.sections[0] sec.text_direction = ST_TextDirection.TB_RL sec.page_width = Mm(297) sec.page_height = Mm(210) sec.grid_lines = 300 """ pass # Not implemented yet return newdocx
def test_x_removeelement(testtree): assert remove_element(testtree, query("w:p")) assert not remove_element(testtree, query("w:grid"))
def test_x_query(testtree): from docxx.oxml.ns import nsmap, qn assert query(testtree)(testtree) assert query("w:body")(testtree) assert query(qn("w:body"))(testtree) assert query("w:grid", x="20")(testtree.find("w:section/w:grid", nsmap))