首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python的docx库,如何缩进一个表?

使用Python的docx库,如何缩进一个表?
EN

Stack Overflow用户
提问于 2018-05-28 05:19:49
回答 3查看 1.9K关注 0票数 1

如何缩进docx表?我正在尝试在2cm上设置一个带有制表位的表格。下面的脚本创建一个标题、一些文本和一个表:

代码语言:javascript
复制
import docx
from docx.shared import Cm

doc = docx.Document()

style = doc.styles['Normal']
style.paragraph_format.tab_stops.add_tab_stop(Cm(2))

doc.add_paragraph('My header', style='Heading 1')
doc.add_paragraph('\tText is tabbed')

# This indents the paragraph inside, not the table
# style = doc.styles['Table Grid']
# style.paragraph_format.left_indent = Cm(2)

table = doc.add_table(rows=0, cols=2, style="Table Grid")

for rowy in range(1, 5):
    row_cells = table.add_row().cells

    row_cells[0].text = 'Row {}'.format(rowy)
    row_cells[0].width = Cm(5)

    row_cells[1].text = ''
    row_cells[1].width = Cm(1.2)

doc.save('output.docx')

它生成一个没有标识的表,如下所示:

表格如何缩进,如下所示?

(最好不必加载现有文档):

例如,如果将left-indent添加到Table Grid样式(通过取消注释行),则它将应用于段落级别,而不是表格级别,从而导致以下结果(不需要):

在Microsoft Word中,可以通过为Indent from left输入2.0 cm来对表属性执行此操作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-13 21:20:59

基于Fred C's answer,我想出了这样的解决方案:

代码语言:javascript
复制
from docx.oxml import OxmlElement
from docx.oxml.ns import qn

def indent_table(table, indent):
    # noinspection PyProtectedMember
    tbl_pr = table._element.xpath('w:tblPr')
    if tbl_pr:
        e = OxmlElement('w:tblInd')
        e.set(qn('w:w'), str(indent))
        e.set(qn('w:type'), 'dxa')
        tbl_pr[0].append(e)
票数 1
EN

Stack Overflow用户

发布于 2018-05-28 08:58:15

python-docx尚不支持此功能。看起来这个行为是由w:tbl元素的w:tblInd子元素产生的。您可以开发一个变通方法函数,使用对w:tbl元素的lxml调用添加一个类似这样的元素,该元素应该在Table对象的._element属性中可用。

你可以通过搜索'python-docx临时函数‘找到其他解决方法函数的例子,也可以通过搜索'python-pptx临时函数’找到类似的函数。

票数 1
EN

Stack Overflow用户

发布于 2019-02-15 05:53:17

下面是我是如何做到的:

代码语言:javascript
复制
import docx
import lxml
mydoc = docx.Document()            
mytab = self.mydoc.add_table(3,3)
nsmap=mytab._element[0].nsmap # For namespaces
searchtag='{%s}tblPr' % nsmap['w'] # w:tblPr
mytag='{%s}tblInd' % nsmap['w'] # w:tblInd
myw='{%s}w' % nsmap['w'] # w:w
mytype='{%s}type' % nsmap['w'] # w:type
for elt in mytab._element:
    if elt.tag == searchtag:
        myelt=lxml.etree.Element(mytag)
        myelt.set(myw,'1000')
        myelt.set(mytype,'dxa')
        myelt=elt.append(myelt)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50556604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档