我想用 python-docx 设置单元格边框。我使用了以下命令,但发生了错误。
document = Document("mydoc.docx")
table = document.add_table(rows=1, cols=3, style='Table Grid')
错误如下;
KeyError: "no style with name 'TableGrid'"
此错误表明“mydoc.docx”中没有“Table Grid”样式。
您可以在此处的文档中阅读有关潜在样式和一般样式以及行为(例如此)的更多信息:
https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html
这里:
https://python-docx.readthedocs.io/en/latest/user/styles-using.html
基本上你需要:
这会将“表格网格”样式添加到该 docx 文件中,然后您的代码应该按预期工作。
您不能使用
Table Grid
,因为文档中没有该样式
或者,您可以在 oxml 级别上工作并将边框元素添加到 tableProperty 元素
import docx
document = docx.Document()
table = document.add_table(2,2)
borders = table._tbl.tblPr.get_or_add_tblBorders()
bottom_border = docx.oxml.shared.OxmlElement('w:bottom')
bottom_border.set(docx.oxml.shared.qn('w:val'), 'single')
bottom_border.set(docx.oxml.shared.qn('w:sz'), '4')
borders.append(bottom_border)
document.save('test.docx')
同样,您可以对上、左、右边框执行相同的操作
@Obay达巴
get_or_add_tblBorders
似乎不再是一种方法,但我能够让它工作:
borders = OxmlElement('w:tblBorders')
bottom_border = OxmlElement('w:bottom')
bottom_border.set(qn('w:val'), 'single')
bottom_border.set(qn('w:sz'), '4')
borders.append(bottom_border)
table._tbl.tblPr.append(borders)
我认为你的在线类型有误:
table = document.add_table(rows=1, cols=3, style='Table Grid')
更新线路:
table = document.add_table(rows=1, cols=3, style='TableGrid')
否则
table.style = 'TableGrid'
从 docx 导入文档
doc = 文档()
table = doc.add_table(rows=1, cols=len(data[0]))
table.style = 'Table Grid' # 该样式为表格添加边框