Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
    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))
Beispiel #4
0
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"]
Beispiel #5
0
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
Beispiel #6
0
def test_x_removeelement(testtree):
    assert remove_element(testtree, query("w:p"))
    assert not remove_element(testtree, query("w:grid"))
Beispiel #7
0
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))